カテゴリー
EC-CUBE

【EC-CUBE4】DB関連

データベース関連の情報をメモしていきます。

環境

EC-CUBE4
Docker-Composeでインストール
Mac

データベース名の変更

初期設定時の場合なので、途中で変更する際は注意下さい。

デフォルトのデータベース設定:eccubedb

変更するには下記ファイルのデータベース名の箇所を変更

.env
docker-compoae.yml

http://localhost:8080/へアクセスするとエラー

dbuserの権限で落ちてますね。

An exception occurred in driver: SQLSTATE[HY000] [1044] Access denied for user 'dbuser'@'%' to database データベース名

ではSQLで確認しましょう

DockerのコンテナへSQL接続

意味が違かったらすみません。

Dockerの下記画面で、黄色の枠のCLIを押せばコンテナのコマンドライン?が起動します。

コマンドラインからmysqlに接続

mysql -u root -p

デフォルトのパスワードは:root

sqlで権限確認

SHOW GRANTS FOR `dbuser`@`%`;

結果

 +------------------------------------------------------+
 | Grants for dbuser@%                                  |
 +------------------------------------------------------+
 | GRANT USAGE ON *.* TO 'dbuser'@'%'                   |
 | GRANT ALL PRIVILEGES ON `eccubedb`.* TO 'dbuser'@'%' |
 +------------------------------------------------------+
 2 rows in set (0.00 sec) 

eccubedbのみの権限になってましたね!

権限を付与していきます。

GRANT ALL ON データベース名.* TO 'dbuser'@`%`; 

データベースにコマンドラインから下記コマンドでデータ投入٩(๑’ꇴ’๑)۶

docker-compose exec ec-cube composer run-script compile 

結果:成功

 > bin/console doctrine:schema:create
 

  ! [CAUTION] This operation should not be executed in a production environment! 
 

  Creating database schema...
 

  [OK] Database schema created successfully!                                     
 

 > bin/console eccube:fixtures:load
   > Finished Successful! 

あとは「http://localhost:8080/」へアクセスして確認─=≡Σ((( つ•̀ω•́)つ

QueryBuilder

EC-CUBEに限らずPHP使うならほとんどのフレームワークに入っている─=≡Σ((( つ•̀ω•́)つ

IN

WHERE IN (1,2,3,4) どれかに該当するデータ

->where($qb->expr()->in('cn.name', $product_code))

JOIN

テーブル結合

->leftJoin('Eccube\Entity\OrderItem', 'oi', 'WITH', 'o.id = oi.id')    

MIN, MAX

cn.nameを長さで使用していたので違和感のある感じになっています。

 $qb->select('MIN(cn.name) min_value', 'MAX(cn.name) max_value')
    ->groupBy('cn.name');

CASE

指定の項目が条件にあった場合は、項目を置き換える。
nullは使い勝手が悪いから、「なし」とかに置き換えても使用可能

->addSelect("(case when t.period = '2020-01-01 00:00:00' then '7日前' else '3日前' end) AS return_date")

WHENが増えるとENDでエラーになる↓

->addSelect("(case when t.period1 = '2020-01-01 00:00:00' then '7日前' when t.period2 = '2020-01-01 00:00:00' then '3日前' end) AS return_date")

作成者: kenshi

ゲーム大好きです。
ApexLegends, Arkやっています。
携帯販売員4年(240万)

プログラマー3年(350万)

フリーランスエンジニア1年(500万)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です