如何在Yajra数据表中正确使用laravel多态关系

时间:2020-01-17 08:53:57

标签: laravel datatables polymorphism yajra-datatable laravel-datatables

我正在使用具有多态关系的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的正确方法是什么? 谢谢

0 个答案:

没有答案