所以我有一个 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
我做错了什么?为什么我不能通过这种关系过滤我的用户?任何帮助将不胜感激,因为我已经花了几个小时,并且不能自己解决。
答案 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
”引用,然后再查询。