Как правильно использовать отношения laravel polymorphi c с Yajra Datatables - PullRequest
0 голосов
/ 17 января 2020

Я использую Laravel Yajra Datatables с полиморфными отношениями c. Проблема в том, что c заключается в том, что я не могу ни фильтровать таблицу, ни сортировать ее должным образом, потому что я заполнил ее разными значениями таблиц.

Таблица A "трансформируется" в таблицы B и C. Таким образом, он имеет столбец

morph_type и morph_id.

Таблицы B и C имеют общие столбцы, такие как:

id, код

, но также другие другие столбцы, такие как

B.name, B. фамилия, 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. Спасибо

...