【问题标题】:Can't filter through Relationship in Laravel Datatables无法过滤 Laravel 数据表中的关系
【发布时间】:2017-08-11 21:41:20
【问题描述】:

所以我有一个 Laravel Datatables 项目,我正在尝试创建一个列,当您单击特定值时,它将向 PHP 后端发送一个 AJAX 请求和将尝试按特定列和您单击的值过滤DataTable 上的结果。

   $sign = Request::input('sign');

    return $this->datatables
        ->eloquent($this->query())
        ->filter(function ($query) use ($sign) {
            if (request()->has('sign')) {
                $query->where('signs.id', "'$sign'");
            }
        }, true)
        ->addColumn('admin', function($user) {
            return $user->admin == 1 ? '<span class="fa fa-star"></span>' : '<span class="fa fa-star-o"></span>';
        })...

问题在于,在 filter 方法中,我无法在相关的 signs 表上执行 Where 子句。它试图查询users 表中的signs.id 列,这不是我想要的。

在我的模型上,我有这样定义的关系

public function signs(){
    return $this->belongsTo('App\Models\Sign', 'sign_id', 'id');
}

我正在向 Datatable 发出基本查询,它定义了用户模型带有符号像这样

public function query()
{
    $query = User::with('signs');

    return $this->applyScopes($query);
}

我做错了什么?为什么我不能通过这种关系过滤我的用户?任何帮助都将不胜感激,因为我已经花费了几个小时并且无法自己解决。

【问题讨论】:

    标签: php datatable eloquent laravel-5.3 relationships


    【解决方案1】:

    我想我终于想通了,我已经生锈了,因为我以前做过这种事情,只是想不起来......

     return $this->datatables
            ->eloquent($this->query())
            ->filter(function ($query) use ($sign) {
                if (request()->has('sign')) {
                    $query->whereHas('signs', function($q) use($sign){
                        $q->where('sign', $sign);
                    });
                }
            }, true)
    

    只需执行whereHas 并重新绑定“signs”引用,然后查询。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 2019-07-24
      • 2018-10-04
      • 2021-03-09
      • 2021-12-21
      • 2020-12-17
      • 2022-01-19
      • 2015-01-29
      相关资源
      最近更新 更多