使用 Yajra Datatables 从 Laravel 集合中获取 2 批关系数据
Getting 2 lots of relationship data from a Laravel collection with Yajra Datatables
我正在努力使我的 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
之间的关系设为多对多,这样您就可以与多个人进行约会用户 and/or 客户端。
我正在努力使我的 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
之间的关系设为多对多,这样您就可以与多个人进行约会用户 and/or 客户端。