首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel雄辩中检索多个表的多重关系

如何在laravel雄辩中检索多个表的多重关系
EN

Stack Overflow用户
提问于 2019-08-23 13:59:45
回答 2查看 205关注 0票数 0

我正在使用Laravel5.8建立一个保姆网站。我有4个不同关系的表,如下所示:

请看这张图片

这些关系是:

代码语言:javascript
复制
Babysitter->hasMany(session)
Sessions->hasOne(Review)
Sessions->hasOne(Kids)
Sessions->hasOne(Babysitter)
Sessions->hasOne(Parent)

我想做两件事:

First one

我想在列出所有的保姆时显示这个结果。我给每个保姆展示了这些信息:

请看这张图片

看看我做不到的事

请看这张图片

这是我的密码

代码语言:javascript
复制
Sitters::where('Status', 'active')->where('Verified', 1)->get();

第二

此外,我还尝试在家长评审中显示孩子的名字,如下所示:

请看这张图片

这就是我要用的

代码语言:javascript
复制
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模型

代码语言:javascript
复制
public function owner(){
    return $this->belongsTo('App\Models\Parents', 'Parent_id');
}
EN

回答 2

Stack Overflow用户

发布于 2019-08-23 14:59:34

如上文所述,改变关系:

代码语言:javascript
复制
Babysitter->hasMany(sesstion)
Sessions->hasOne(Review)
Sessions->belongsTo(Kids)
Sessions->belongsTo(Babysitter)
Sessions->belongsTo(Parent)

First one

Babysitter.php中声明以下属性

代码语言:javascript
复制
class Babysitter extends Model
{
    public function reviews()
    {
        $this->hasManyThrough(Review::class, Session::class);
    }

    public function getAverageReviewAttribute()
    {
        return $this->reviews()->avg('Rating');
    }
}

然后只需要在模型实例上调用它。

代码语言:javascript
复制
$babysitter = Babysitter::first();
return $babysitter->average_review;

第二

就用这个关系

代码语言:javascript
复制
$babysitter = BabySitter::with(['sessions' => public function ($session) {
        $session->with(['review','parent','kids']);
    })->where('trainer_id', '=', session('user')->Id) //did not understand this condition
    ->first();

这假设您在parentkidsreview关系上声明了Session::class。(如有需要,请更改名称)

票数 1
EN

Stack Overflow用户

发布于 2019-08-24 08:39:53

经过几天的搜索和测试,这对我来说是有效的:

内部(Sitters)模型,把这个关系

代码语言:javascript
复制
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)'));
        }]);
}

另外,内部(会话)模型,把这种关系

代码语言:javascript
复制
public function reviews()
{
    return $this->hasOne(Reviews::class, 'Session_id');
}

现在你这样查询

代码语言:javascript
复制
return $sitters = Sitters::with('sessions')->get();

我希望这能帮助到某人:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57627880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档