Open17

Laravelのこといろいろ(ただのメモになっている)

あたあた

API
Resourceにwithを記述するとよい

あたあた

ログの確認しながら実施する時によくやるやつ

①デバッグしたい箇所にLogを仕込む
例。\Log::info(‘hoge');
②対象フォルダからドッカーの中に入る
% cd (プロジェクトフォルダ)
% docker-compose exec php ash
③最新のログ状態が確認できるようにtailしておく

# cd storage/logs
# tail -f laravel.log
あたあた

コントローラーの作成
「ModelNameController」の前部分はプロジェクトのフォルダ構成による

# php artisan make:controller xxx/ModelName/ModelNameController --model=ModelName --api

今のプロジェクトはコマンドでプロジェクト標準テンプレートを入れてくれる
makeコマンドのカスタマイズ(laravel7.x以降)が入っている
https://qiita.com/mmmmmmanta/items/36d6c75849ff3af50bf4

あたあた

■実行後のロールバックがうまくいかない時

1つずつ確認

1つだけロールバックする

# php artisan migrate:rollback --step=1

作り直し

全てのテーブルを作りなおし

# php artisan migrate:fresh
あたあた

bootstrap-tableに関する話

stateが更新されているはずなのに、bootstrap-table内だと表示されない問題

①tableのColumns内に以下を設定しないといけない。

formatExtraData: { stateTest },

②渡す部分の並びや数の影響と、記述位置をformatter内にする

この渡す部分の並びや数も同じでないといけない→(col, row, rowIndex, formatExtraData)

const testFormatter = (col, row, rowIndex, formatExtraData) => {
  const { stateTest } = formatExtraData; 

formatter内に渡したデータを利用すればstateが使える

中かっこ{}は並び替えられるが、かっこ()は並びや数を同じにしないといけない
https://teratail.com/questions/133559

それもそうか。雰囲気でやってたからか・・・

あたあた

■新しいMacのターミナル出力件数の設定

Ctrl + , で ユーザー設定 の settings.json を 表示

Terminal › Integrated: Scrollback
ターミナルがバッファーに保持する最大行数を制御します。
1000→100000

ターミナルの表示が多いと切れちゃって困る時に実施する

バージョンメモ

Swagger-PHP 2.0.16

あたあた

Docker内に入る

 # docker-compose exec php ash

Seeder実行(migrationリフレッシュ後にSeederも実行する場合)

  # php artisan migrate:fresh --seed

Seeder実行(個別にSeederも実行する場合)

  # php artisan db:seed --class=TestSeeder
あたあた

速度改善に関して(バージョンにもよるんか?)

withが重い(毎回selectしているので)=わかる、確かに
→joinに変更
query()が重い(モデル内のquery記述によるもの)=それもあるのか、知らなかった
→selectにして必要な項目だけにした

あたあた

Laravelでは with() を使うと、
モデルで定義したリレーションを使ってSQLが自動的に発行される
結果的に SQLを発行しているのと同じ動作

この子達のいる意味・・・

あたあた

■問題箇所
$Human->number → SQL発行されない(取得できているから)
$Human->Credit->amount → SQL発行される(withの対象だから)

■対策
with→joinへ変更し、対象項目をselectで取得。
モデル箇所を配列で変数へ
$HumanArray = $Human->toArray()にして、
絶対にSQL発行しないようにする。
$HumanArray ["number"]
$HumanArray ["deposit_amount"] ←追加したselect項目
で取得する

■追加対策
条件(where)で絞り込み

あたあた

個別テスト

/var/www # ./vendor/bin/phpunit --version
/var/www # ./vendor/bin/phpunit tests/Feature/Test/SampleTest.php 

グループ設定した部分のテスト

/var/www # ./vendor/bin/phpunit tests/Feature --group test --testdox

SampleTest.php

/**
 * @group test
 */
class SampleTest extends TestCase
{
    /**
     * @testdox テストメモ
     */
    public function testSample(){
    }
}

さらに個別実施

/var/www # ./vendor/bin/phpunit tests/Feature/SampleTest.php --testdox --filter=testSample
あたあた

githubのPRレビュー
https://qiita.com/n-okutomi/items/ff574b62633f7edee50b

チームコメント

「start a review」から投稿してください。
「start a review」から投稿したコメントにはスレッド形式で返信が書けるが、
「Add single comment」でコメントしてしまうとスレッド形式にならなくなってしまうため。

マージ後(事後)PRレビューの場合は
コメント(確認・問題ありません等)して「レビュー送信」

あたあた

SQLのWithという選択肢を忘れがち

WITH main_tests_base AS (
  SELECT ...
  FROM main_tests
  JOIN ...
  WHERE ...
),
main_deposit_summary AS (
  SELECT ...
  FROM main_tests
  WHERE ...
)
SELECT ...
FROM main_tests_base mt
LEFT JOIN main_deposit_summary md ON mt.id = md.credit_slip_id

パフォーマンスがどうなのか、気になるところではある・・・

パフォーマンス面の注意点
❶ 非インライン化される可能性
MySQL(8.0以降)などの一部のRDBMSでは、WITH句が一時テーブルとして評価されることがあります。
結果として:
WITH句の中身がメモリやディスクに一時保存される
必要以上にI/Oが増え、遅くなることがある
❷ インデックスが使われにくい場合がある
CTEが一時テーブル化された場合、元テーブルのインデックスが利用されず、フルスキャンになることも。
❸ 繰り返し参照時のコスト
同じCTEを複数回参照すると、毎回評価されるか、一時テーブルが繰り返し使われるかはDBエンジン依存。

あたあた
(\)バックスラッシュ
option+¥
(`)バッククォート
Shift+@