无法通过Laravel数据表中的关系进行过滤

时间:2017-03-20 14:41:42

标签: php datatable eloquent laravel-5.3 relationships

所以我有一个 Laravel Datatables 项目,我正在尝试创建一个列,当您点击特定值时,它会向AJAX个请求发送PHP个请求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方法我不能在相关signs.id表上执行Where子句。它试图查询users表中的public function signs(){ return $this->belongsTo('App\Models\Sign', 'sign_id', 'id'); } 列,这不是我想要的。

在我的模型上,我的关系定义如下

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

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

我向Datatable发出了一个基本查询,该查询定义了用户模型带有的标志

print ((np.argsort(-df.values, axis=1)))
[[0 2 1]
 [1 2 0]
 [0 2 1]
 [0 2 1]]

print (df.columns[np.argsort(-df.values, axis=1)])
Index([['aaa', 'ccc', 'bbb'], ['bbb', 'ccc', 'aaa'], ['aaa', 'ccc', 'bbb'],
       ['aaa', 'ccc', 'bbb']],
      dtype='object')

df['future_calcs'] = [', '.join(x) for x in df.columns[np.argsort(-df.values, axis=1)]]
print (df)
   aaa  bbb  ccc   future_calcs
0   70   27   32  aaa, ccc, bbb
1    4   27   15  bbb, ccc, aaa
2   51   17   37  aaa, ccc, bbb
3   95   27   88  aaa, ccc, bbb

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

1 个答案:

答案 0 :(得分: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”引用,然后再查询。