【问题标题】:Getting 2 lots of relationship data from a Laravel collection with Yajra Datatables使用 Yajra 数据表从 Laravel 集合中获取 2 大量关系数据
【发布时间】:2020-12-09 02:22:19
【问题描述】:

我正在尝试让我的 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);

    }

谢谢

【问题讨论】:

    标签: laravel eloquent laravel-7 yajra-datatable


    【解决方案1】:

    您可能正在寻找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 之间的多对多关系,这样您就可以与多个用户和/或客户进行约会。

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2020-11-27
      • 2021-08-06
      • 2021-03-26
      • 1970-01-01
      • 2020-07-01
      • 2018-02-14
      • 2019-02-15
      • 1970-01-01
      相关资源
      最近更新 更多