我正在使用Laravel5.8建立一个保姆网站。我有4个不同关系的表,如下所示:
这些关系是:
Babysitter->hasMany(session)
Sessions->hasOne(Review)
Sessions->hasOne(Kids)
Sessions->hasOne(Babysitter)
Sessions->hasOne(Parent)我想做两件事:
First one
我想在列出所有的保姆时显示这个结果。我给每个保姆展示了这些信息:
看看我做不到的事
这是我的密码
Sitters::where('Status', 'active')->where('Verified', 1)->get();第二
此外,我还尝试在家长评审中显示孩子的名字,如下所示:
这就是我要用的
Sessions::select('Reviews.*', 'Sessions.Parent_id')->join('Reviews', 'Reviews.Session_id', '=', 'Sessions.id')->with('owner')->where('Trainer_id', session('user')->Id)->where('Status', '=', 'complete')->with('owner')->orderBy('Sessions.id', 'DESC')->get();这是Session.php模型
public function owner(){
return $this->belongsTo('App\Models\Parents', 'Parent_id');
}发布于 2019-08-23 14:59:34
如上文所述,改变关系:
Babysitter->hasMany(sesstion)
Sessions->hasOne(Review)
Sessions->belongsTo(Kids)
Sessions->belongsTo(Babysitter)
Sessions->belongsTo(Parent)First one
在Babysitter.php中声明以下属性
class Babysitter extends Model
{
public function reviews()
{
$this->hasManyThrough(Review::class, Session::class);
}
public function getAverageReviewAttribute()
{
return $this->reviews()->avg('Rating');
}
}然后只需要在模型实例上调用它。
$babysitter = Babysitter::first();
return $babysitter->average_review;第二
就用这个关系
$babysitter = BabySitter::with(['sessions' => public function ($session) {
$session->with(['review','parent','kids']);
})->where('trainer_id', '=', session('user')->Id) //did not understand this condition
->first();这假设您在parent、kids和review关系上声明了Session::class。(如有需要,请更改名称)
发布于 2019-08-24 08:39:53
经过几天的搜索和测试,这对我来说是有效的:
内部(Sitters)模型,把这个关系
public function sessions()
{
return $this->hasMany(Sessions::class, 'sitter_id')
->withCount('reviews')
->withCount(['reviews as review_avg' => function($query){
$query->select(DB::raw('AVG(Rating)'));
}]);
}另外,内部(会话)模型,把这种关系
public function reviews()
{
return $this->hasOne(Reviews::class, 'Session_id');
}现在你这样查询
return $sitters = Sitters::with('sessions')->get();我希望这能帮助到某人:)
https://stackoverflow.com/questions/57627880
复制相似问题