Laravel-在不检查他人的情况下检查关系的最新记录的地方

ash*_*ghe 2 php sql-server eloquent laravel-5

我有两个表具有一对多关系。

预订- (id)

booking_tasks- (id, booking_id,user_id)

一项预订有很多任务一项任务有一个预订

预订模式:

 public function tasks() {
    return $this->hasMany('App\BookingTask');    
  }
Run Code Online (Sandbox Code Playgroud)

BookingTask模型

public function booking() {
    return $this->belongsTo('App\Booking');
} 
Run Code Online (Sandbox Code Playgroud)

我想获取预订列表,其中user_id = 2代表最新的booking_task。我不想检查其他旧的Booking_tasks。

例如:

在此处输入图片说明

我想检查booking_task的user_id = 2的最后一条记录,然后将其作为预订。在示例中,最后的booking_task的user_id =5。因此,它不会作为预订。

我的代码是:

$bookings=Booking::whereHas('tasks',function($q){
            $q->where('user_id',2);//this will check whether any of record has user_id =2
})->get();
Run Code Online (Sandbox Code Playgroud)

我也用过:但这不是正确的方法,

$bookings=Booking::whereHas('tasks',function($q){
                $q->latest()->where('user_id',2)->limit(1);//this will check whether any of record has user_id =2 and return latest one.
    })->get();
Run Code Online (Sandbox Code Playgroud)

我可以解决这个问题,我也必须使用Laravel Eloquent。

Jon*_*eir 7

这需要一个更复杂的查询:

$bookings = Booking::select('bookings.*')
    ->join('booking_tasks', 'bookings.id', 'booking_tasks.booking_id')
    ->where('booking_tasks.user_id', 2)
    ->where('booking_tasks.id', function($query) {
        $query->select('id')
            ->from('booking_tasks')
            ->whereColumn('booking_id', 'bookings.id')
            ->latest()
            ->limit(1);
    })->get();
Run Code Online (Sandbox Code Playgroud)