我有点卡在这里,同时在laravel雄辩中查询多个关系我有原始查询,如
SELECT * FROM tblSchedules,tblUserHomeCourts,tblHomeCourts
where tblHomeCourts.userId=6
and tblHomeCourts.homeCourtId=5
and (tblSchedules.timeFrom <= 1495617580
and tblSchedules.timeTo >= 1495617580)
and tblUserHomeCourts.userHomeCourtStatus=1
and tblSchedules.scheduleStatus=0
现在我需要将这个原始查询查询为laravel eloquent。我试图这样做
$getSchedule= Schedule::with(['userSchedule' => function($query) use ($userId,$homeCourtId,$timeFrom, $timeTo) {
$query->where(['userId'=> $userId,'homeCourtId'=>$homeCourtId,'userHomeCourtStatus' => Constant::STATUS_1]);
}]) ->where('timeFrom','<=',$timeFrom)
->where('timeTo','>=',$timeTo)
->where(['scheduleStatus'=>Constant::STATUS_0])
->get();
但是我没有得到结果而不是这个我得到空白的消息数组,我应该得到记录。
问题: 我做错了什么? 建议我查询这个查询的正确方法。
日程表模型
public function friendsFeed(){
return $this->hasOne(UserHomeCourt::class,'userHomeCourtId','userHomeCourtId')->with('user')->with('homeCourt');
}
public function userSchedule(){
return $this->hasOne(UserHomeCourt::class,'userHomeCourtId','userHomeCourtId')->with('homeCourt');
}
UserHomeCourt Model
public function homeCourt(){
return $this->belongsTo(HomeCourt::class,'homeCourtId','homeCourtId');
}
public function user(){
return $this->belongsTo(User::class,'userId','userId');
}
}
HomeCourt模型
public function friendsFeed()
{
return $this->hasOne(UserHomeCourt::class, 'homeCourtId', 'homeCourtId');
}
public function userSchedule()
{
return $this->hasOne(UserHomeCourt::class, 'homeCourtId', 'homeCourtId');
}
获得的响应
答案 0 :(得分:1)
从你的sql到eloquent的时间检查是错误的,当你将多个条件传递给where
时,你需要将条件设置为一个数组。
$getSchedule= Schedule::with(['userSchedule' => function($query) use ($userId, $homeCourtId) {
$query->whereHas('homeCourt', function ($query) use ($userId, $homeCourtId) {
$query->where('userId', $userId)
->where('homeCourtId', $homeCourtId);
})->where('userHomeCourtStatus', 1);
}])
->where('timeFrom', '<=', $timeFrom)
->where('timeTo', '>=', $timeTo)
->where('scheduleStatus', 0)
->get();
答案 1 :(得分:0)
尝试使用whereHas
函数:
Schedule::whereHas('userSchedule', function ($query)
{
$query->where('userId', $userId)
->where('homeCourtId', $homeCourtId)
->where('userHomeCourtStatus', Constant::STATUS_1);
})
->where('timeFrom', '<=', $timeFrom)
->where('timeTo', '>=', $timeTo)
->where('scheduleStatus', Constant::STATUS_0)
->get();