如何在laravel eloquent

时间:2017-05-24 11:02:26

标签: php mysql laravel eloquent

我有点卡在这里,同时在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');
}

我从SQL查询Query Result

获得的响应

2 个答案:

答案 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();