我正在使用具有多态关系的Laravel Yajra数据表。 特殊的麻烦是我无法过滤表也无法正确排序,因为我用不同的表值填充了表。
表A对于表B和C是“可变形的”。因此它具有列
morph_type和morph_id。
表B和C具有共同的列,如:
id,代码
以及其他不同的列
B.name,B.surname,C.lastname,C.firstname
因为过滤器不起作用,所以我尝试实现Datatables filterColumn API。 但是我真的不知道该查询的正确方法。 这是我的sql(Postgresql):
$query = A::with('morphable')->select('*');
return Datatables::of($query)
->addColumn('code', function($row) {
return $row->morphable->code_pap;
})
->addColumn('name', function($row) {
if($row->morphable->name !== null){
return $row->morphable->name;
} else {
return $row->morphable->lastname;
}
})
->addColumn('surname', function($row) {
if($row->morphable->surname !== null){
return $row->morphable->surname;
} else {
return $row->morphable->firstname;
}
})
->filterColumn('name', function($query, $keyword) {
//I check $query it retruns "select * from A;" only.
// redefining $query does not change anything. I always get same query.
$sqlB = "CASE WHEN exists (select 1 from B where B.name like ?)";
$sqlC = "CASE WHEN exists (select 1 from C where C.lastname like ?)";
$query->whereRaw($sqlB, ["%{$keyword}%"])->orWhereRaw($sqlC, ["%{$keyword}%"]);
}) //same thing for firstname and surname ;
当然,sql不起作用。我在“选择”附近和“或”附近收到错误。那么,使用/不使用sql raw的正确方法是什么? 谢谢