データベース関連の情報をメモしていきます。
環境
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")
コメント