在Laravel中基于数据的一对多(反向)关系获取行列表

时间:2018-07-01 07:34:45

标签: laravel eloquent

我有两个模型,Showtime和Movie。具有以下关系。

class Showtime extends Model{
    public function movie() {
        return $this->belongsTo('App\Movie');
    }
    //...
}

,对于电影

class Movie extends Model
{
    public function showtimes() {
        return $this->belongsToMany('App\Showtime');
    }
    //...
}

他们的表结构看起来像这样。

放映时间

  • id
  • movie_id
  • 日期
  • ...

电影

  • id
  • 标题
  • ...

我的问题是,如何获得特定日期之后在放映时间中列出的电影列表。

PS:对不起,标题,我不知道如何用简短的描述性词来表达。

1 个答案:

答案 0 :(得分:3)

您在Movie模型中的关系定义是错误的,应该使用hasMany

class Movie extends Model
{
    public function showtimes() {
        return $this->hasMany('App\Showtime');
    }
}

此部分固定下来,您应该能够在给定日期之后查询具有放映时间的电影,如下所示:

$date = Carbon::now();
$movies = Movie::whereHas('showtimes', function ($query) use ($date) {
    $query->where('date', '>=', $date);
})->get();