シングルページアプリケーションを作成していて、一気に関連するデータを取ってきたい場面がありました。
遅延ロード
Eloquentリレーションをプロパティーとしてアクセスする場合、リレーションのデータは「遅延ロード」されます。
つまりプロパティーにアクセスしてはじめて、リレーションのデータがロードされます。
Eagerローディング
Eloquentではモデルを取得した時点でリレーションをロードするようにできる、「Eagerローディング」という機能があります。
$withプロパティをオーバーライドします。
User.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $with = ['books'];
public function books()
{
return $this->hasMany(Book::class);
}
}
全てのUserを取得します。
App\User::all();
// Userに関連するBookが既に紐付いた状態でUserを取得できる