我的表格结构为
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。
答案 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');
}
}