【发布时间】:2018-11-20 17:18:28
【问题描述】:
我有以下型号:
<?php
class User extends Model {
public function department() {
return $this->hasOne(Department::class);
}
}
class Department extends Model {
protected $appends = ["email"];
public function getEmailAttribute() {
return "$this->name@$this->domain";
}
public function user() {
return $this->belongsTo(User::class);
}
}
我正在提取用户列表,包括他们的部门,并在带有服务器端分页/排序/搜索的数据表中显示(使用 Laravel DataTables 包):
<?php
class UserController extends Controller {
public function dt() {
$users = User::with("department")
->where("location_id", session("current_location"));
return DataTables::of($users)->make();
}
}
在数据表设置中,我的一列定义如下:
{data: "department.email"}
这将毫无问题地显示email 访问器属性。当我尝试根据此列进行搜索或排序时出现问题:
DataTables 警告:表 id=DataTables_Table_0 - 异常消息:
SQLSTATE[42S22]:找不到列:1054 'where 子句'中的未知列'departments.email'
显然,datatables 不知道这是一个访问器,并尝试将其包含在查询中——结果可预测。
我能找到参考的唯一解决方法是使用the filterColumn method,它允许您为特定列定义自定义WHERE 子句。但据我所知,a) 要求您使用查询构建器手动定义列,而 b) 仅适用于模型,而不是其中的一个关系。
有什么方法可以像使用关系的“真实”属性一样搜索和排序此访问器属性?
【问题讨论】:
-
您找到解决方案了吗?遇到同样的问题。我没有使用关系,但仍然无法搜索访问器字段。
-
@waterloomatt 是的,在我提出这个问题大约一年后,我确实让它工作了。请参阅下面的答案。
标签: php laravel yajra-datatable laravel-datatables