Laravel Eloquentでリレーション先のデータを付与した状態でデータ抽出

標題の通りです。

非常にシンプルでして、withを使います。

下記で紹介したModel / controllerを引用しながらwithの処理を追加していきます。

上記の$movieデータに追加して、Actor modelも一緒にリレーションされた状態でデータ抽出したいと思います。

movie Modelに リレーションにactors()を追加します。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Movie extends Model
{
    use HasFactory;

    protected $fillable = [
        'movie_title',
    ];

    public function tags()
    {        
        return $this-->hasMany(Tag::class);
    }

    public function actors()
    {        
        return $this-->hasMany(Actor::class);
    }


}

Controllerの処理

->with('actors')を追加します。
public function search($words)
{
    
    $movie = LatestChannel::with('tags')
    ->whereHas('tags', function ($query) use ($words) {
            return $query->where('tag_name', "LIKE", "%".$words."%");
        })
    ->orWhere('movie_title', "LIKE", "%".$words."%")
    ->with('actors') // 追加
    ->get();

    return $movie;

}

これで、movieデータに +で movieに紐づく actorsのデータも一緒に抽出することが出来ます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です