提取所有相关记录

时间:2018-09-20 07:03:24

标签: laravel eloquent

我的表格结构为

用户

id|name|is_active

事件

id|user_id(foreign key from user table)|event_name|is_active

事件用户(事件和用户的链接表)

id|user_id(from user table)|event_id(from event table)|is_active

记录

id|user_id(from user table)|event_id(from event table)|value|is_active

我要在登录后获取用户的所有相关记录

User (Object)
   |- Event(Object)
        |- Record
   |-Event2(Object)
        |- Record
        |- Record

请为此提出解决方案。我用的是雄辩的

按照建议,我使用了答案,但是在提供where条件时,我没有得到期望的结果 我的查询

 $userDetail = $user->with('eventUsers.events.records')->whereHas('eventUsers', function ($query){
                $query->where('is_active', 1);
            })->first();

这里是从evenusers呈现所有结果。我只需要活动的eventUsers。

3 个答案:

答案 0 :(得分:1)

您可以像下面这样使用雄辩的“关系”逻辑

在用户模型中     获取用户事件的详细信息

    public function getEvent(){
        return $this->hasMany('App\Event');
    }

事件模型中     获取事件记录的详细信息

    public function getRecord(){
        return $this->hasMany('App\Record');
    }   

您的最终查询

$user_details = User::with('getEvent.getRecord')->get();

答案 1 :(得分:0)

在用户模型中排在第一位:

public function events()
{
    return $this->belongsToMany(App\Event::class)->withPivot('is_active');
}

然后在您的事件模型中:

public function records()
{
    return $this->hasMany(\App\Record::class);
}

然后您可以像这样获取数据:

$user = User::where('id', auth()->id())->with('events.records')->first();

答案 2 :(得分:0)

public function getAllEvents() {
    $results = User::with(['events','events.records'])->where('id',auth()->id());
    $events = $results->get();
}

User.php     

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model {

    public function events() {
        return $this->hasMany(Event::class, 'user_id');
    }

}

Event.php

<?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Event extends Model {

        public function records() {
            return $this->hasMany(Record::class, 'event_id');
        }

    }