コードレビューで実際に貰ったコメントまとめ

【Eloquent】get()の第二引数
Post::where('category', $category)->get('title', []);
get()
したときに対象のレコードが無かった場合、null
が返ってくるため、
null
以外で取得したい場合は、第二引数
に渡したい値を記入することができます。

【その他】データを取得するメソッドの命名
get
はクラスのプロパティを取得する時(いわゆるゲッター)に使うことがほとんどなので、
それ以外ではあまり使わない方がいいですね。
今回はAPIでデータを取得しているんで、fetch
がいいかな?
※ DBから取得する場合はretrieve
あたりが良かったりします。

【Helpers】env()の記載場所
Laravelではconfigファイル内以外でenv()
を使うのはアウトです。
config:cache
されるとenv()
は全てnull
を返すようになるので、本番環境で死んじゃうんですよね。
一度tinkerで試してみた方がいいかもしれないです。
-
tinker
に入る -
env('APP_ENV')
でlocal
が表示されるのを確認 - tinkerを抜ける
-
php artisan config:cache
でキャッシュ生成 -
tinker
に入る -
2
同様env('APP_ENV')
を入力してみる
キャッシュ前はlocal
だったのが今はnull
になってると思います。
なので、.env
の内容はconfig
ファイルにenv()
で書いてあげて、使う場合は全部config()
で呼び出す必要があります。
※ 実験が終わったらキャッシュクリアしておかないと面倒なんで忘れずに php artisan config:clear

【Validation】ユニークの除外
更新でunique
を指定する際はignore
で「自分以外」指定をしておいた方がいい

【Helpers】連想配列の値の取得
以下公式より引用。
このdata_get
関数は、「ドット」表記を使用してネストされた配列またはオブジェクトから値を取得します。
$data = ['products' => ['desk' => ['price' => 100]]];
$price = data_get($data, 'products.desk.price');
// 100
このdata_get関数はデフォルト値も受け入れます。デフォルト値は、指定されたキーが見つからない場合に返されます。
$discount = data_get($data, 'products.desk.discount', 0);
// 0
この関数は、配列またはオブジェクトの任意のキーをターゲットとするアスタリスクを使用したワイルドカードも受け入れます。
$data = [
'product-one' => ['name' => 'Desk 1', 'price' => 100],
'product-two' => ['name' => 'Desk 2', 'price' => 150],
];
data_get($data, '*.name');
// ['Desk 1', 'Desk 2'];
{first}およびプレースホルダー{last}は、配列内の最初または最後の項目を取得するために使用できます。
$flight = [
'segments' => [
['from' => 'LHR', 'departure' => '9:00', 'to' => 'IST', 'arrival' => '15:00'],
['from' => 'IST', 'departure' => '16:00', 'to' => 'PKX', 'arrival' => '20:00'],
],
];
data_get($flight, 'segments.{first}.arrival');
// 15:00

【Migration】
- テーブル名で
data
は使わないこと、data
だと意味が広すぎて伝わらないため。 -
migration
生成時、一旦rollback
も試してエラーが発生していないか確認すること。