如何解决使用Yajra数据表从Laravel集合中获取2个关系数据
我正在尝试使我的Yajra数据表正常工作,但仍在挣扎。
基本上,我想获得客户端属于已登录用户的所有客户端约会。然后,我想访问“客户名称”,然后访问约会数据。我已经使用以下方法获取约会数据
$user = User::find(Auth::user()->id);
$data = $user->clients()->with('appointments')->get()->pluck('appointments')->flatten();
return Datatables::of($data)
->make(true);
这使我可以为用户拥有的客户约会存在的每个约会显示一行。但是如何从中访问客户名称呢?
我尝试了许多不同的方法,但是如果我使用类似的方法
$data = $user->clients()->with('appointments')->get();
我可以访问所需的所有数据,但它显示每一行中的现有客户端,而不是客户端拥有的所有约会。
我的设置是
用户模型
public function clients(){
return $this->hasMany(Client::class);
}
public function appointments()
{
return $this->hasManyThrough(Appointment::class,Client::class);
}
客户端模型
public function appointments(){
return $this->hasMany(Appointment::class);
}
public function users(){
return $this->belongsTo(User::class);
}
约会模式
public function client(){
return $this->belongsTo(Client::class);
}
谢谢
解决方法
您可能正在寻找whereHas
:
$appointments = Appointment::with('client')
->whereHas('client.users',function ($query) use ($user) {
$query->where('users.id',$user->id)
})
->get();
这表示:“给我所有属于特定用户客户端的约会”。
只是一个建议,将您的数据库结构更改为更灵活的方法(完全不需要)。例如,如果您跟踪约会中存在的用户怎么办?
appointments
- user_id
- client_id
这会使您的查询更简单
// In User
public function appointments()
{
return $this->hasMany(Appointment::class);
}
$user->appointments()->with('client')->get();
您可以通过将User
与Appointment
,Client
和Appointment
之间的关系进行更多到更多的处理,以便与多个用户和多个约会进行约会。 /或客户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。