バージョン選択

フォーラム

メニュー

オンライン状況

65 人のユーザが現在オンラインです。 (59 人のユーザが フォーラム を参照しています。)
登録ユーザ: 2
ゲスト: 63
kmorita tattsu もっと...

サイト内検索

質問 > 管理機能 > ターミナルからapp/consoleを使ってDBの処理をしたい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kore
投稿日時: 2017/9/27 15:35
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
ターミナルからapp/consoleを使ってDBの処理をしたい
[EC-CUBE] 3.0.15
[レンタルサーバ] ゼンロジック
[OS] CentOS 6.7
[PHP] 7.1
[データベース] MySQL 5.6
[WEBサーバ] Apache 2.2.x
[ブラウザ] Google Chrome
[導入プラグインの有無] プラグインジェネレータ、Wysiwygエディタ
[実装したいこと] ターミナルからメソッドを叩いてDBの操作を行いたいのですが、方法がわかりません。
状況としては、管理画面でのDBへのカラム追加、データ挿入等は独自で出来ている状態です。そのような処理を、コマンドを叩いた際にも行いたいのですが、command?ファイルからDBを操作する書き方がわからず、困っています。
どなたかご教授いただけますと幸いです。
何卒、よろしくお願いいたします!
468
投稿日時: 2017/9/27 16:35
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
>管理画面でのDBへのカラム追加、データ挿入等は独自で出来ている状態です。
コントローラークラスでのDBの操作と基本的に書き方は変わらないと思います。
function execute()の中で、$this->app['eccube.repository.*****']やQueryBuilder等を利用してDBを利用できると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kore
投稿日時: 2017/9/27 17:55
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
コントローラークラスでのDBの操作と変わらないんですね!ありがとうございます。一度試してはみたんですが、改めて試してみます!
kore
投稿日時: 2017/9/27 20:59
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
すみません!やっぱりcommandファイルからDBの操作がわからないので相談させてください。execute()の中身はこんな感じです。
$qbからgetSingleResult();まではProductRepositoryからコピペして取ってきました。

protected function execute(InputInterface $input, OutputInterface $output) {

$qb = $this->createQueryBuilder('p');
$qb->addSelect(array('pc', 'cc1', 'cc2', 'pi', 'ps'))
->innerJoin('p.ProductClasses', 'pc')
->leftJoin('pc.ClassCategory1', 'cc1')
->leftJoin('pc.ClassCategory2', 'cc2')
->leftJoin('p.ProductImage', 'pi')
->innerJoin('pc.ProductStock', 'ps')
->where('p.id = :id')
->orderBy('cc1.rank', 'DESC')
->addOrderBy('cc2.rank', 'DESC');

$product = $qb
->getQuery()
->setParameters(array(
'id' => 1,
))
->getSingleResult();



$this->app = $this->getSilexApplication();

\Eccube\Util\Cache::clear($this->app,$input->getOption('all'));
$output->writeln(sprintf("%s <info>success</info>", 'cache:clear'));

}

ターミナルから実行したところ、Uncaught Error: Call to undefined method Eccube\Command\ProductDiscountCommand::createQueryBuilder()
とのエラーが表示されており、createQueryBuilder()が使えないというエラーだと思っています。
QueryBuilderが使えず困っています。そもそもの利用方法が誤っているのでしょうか?知識不足で申し訳ございませんが、ご教授いただけますと幸いです。
よろしくお願いいたします!
468
投稿日時: 2017/9/28 9:55
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
1つの考え方かと思いますが、私が実装するのであれば、
function execute()に全ての処理を記述するのではなく、
createQueryBuilderを利用するような処理は、******Repositoryクラスにメソッドを追加し、
execute()では、あくまで******Repositoryクラスのメソッドを呼び出す形にします。
それぞれのクラスには、役割がありますので、
データベースとのやり取りは、Repositoryクラスに任せるのがスムーズではないでしょうか?

Repositoryクラス内であれば、createQueryBuilderが使えないという事はないと思います。

commandクラスはcontrollerクラスと置き換えて考えると、ほとんどの事が対応できると思います。
(controllerクラスはhttpリクエストを受け取ってレスポンスを返す仕組みで
 commandクラスはコマンドラインから引数を受け取って結果を出力する仕組みと
 私は理解しています)


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kore
投稿日時: 2017/9/28 10:23
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
なるほど!Repositoryクラスが、MVCのモデル的な役割、ということですね・・・すみません、そこが理解できていなかったです。symfony2に関しても書籍で勉強しておりましたが、そこまで理解できておらず初歩的な質問になってしまいすみませんでした。ありがとうございます!挑戦します!
kore
投稿日時: 2017/9/28 11:12
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
いつまでもすみません!再度質問させてください。
commandクラスからRepositoryクラスのメソッドを呼び出す、という考え方は理解できるのですが、commandクラスからRepositoryクラスを利用する方法がわからず苦戦しています。。。
controllerクラスから利用する際には、メソッドの引数に$appが指定されており、
$Product = $app['eccube.repository.product']->find($id);
という記述で利用出来ていますがcommandクラスには$appが存在していないので考えてはいるのですが詰まっております。
質問ばかりで申し訳ないですがご教授いただけますと非常にありがたいです・・・
何卒、よろしくお願いいたします!
468
投稿日時: 2017/9/28 11:18
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
RouterCommand.php等のfunction execute()の中を確認いただくと分かると思いますが、
最初に以下の記述で$this->appにSilexApplicationクラスをセットして初期化しているかと思います。

$this->app = $this->getSilexApplication();
$this->app->initialize();
$this->app->boot();


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kore
投稿日時: 2017/9/28 12:04
対応状況: −−−
半人前
登録日: 2017/9/26
居住地:
投稿: 22
Re: ターミナルからapp/consoleを使ってDBの処理をしたい
なるほど!!!ありがとうございます!!!
ソース確認できたので、今から試します。
毎度毎度本当にありがとうございます!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,700名です
総投稿数は109,943件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1283
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.