{ $paymentInfo = $contract->paymentInfo()->first(); } // リレーション定義 class Contract extends Model { public function paymentInfo() { return $this->hasOne(PaymentInfo::class); } } 改修 Before
$paymentInfo = $contract->paymentInfo()->first(); } 17 class Contract extends Model { public function paymentInfo() { return $this->hasOne(PaymentInfo::class); } } 改修 After // リレーション定義 class Contract extends Model { public function paymentInfo() { return $this->hasOne(PaymentInfo::class); } }
$post->comments; } 「親のモデルに対するクエリと同時にリレーションデータも取得する」 補足:Eagerロードとは(ざっくり) SELECT * FROM posts; SELECT * FROM comments WHERE post_id IN (?, ?, ... → post が何件あろうと、クエリ2回で取得できる 50 対して、リレーションデータへのアクセス時にクエリを発行するものを「Lazyロード」と いう。 N+1問題の原因になるが、メモリ消費を抑えられるなどのメリットもある。