使用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();

您可以通过将UserAppointmentClientAppointment之间的关系进行更多到更多的处理,以便与多个用户和多个约会进行约会。 /或客户。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...