我正在尝试使我的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);
}
谢谢
答案 0 :(得分:0)
您可能正在寻找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
之间的关系进行更多到更多的处理,以便与多个用户和多个约会进行约会。 /或客户。