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。
这需要一个更复杂的查询:
$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)
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |