Поиск аксессора загруженного отношения из таблиц данных

У меня есть следующие модели:

<?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();
}
}

В настройке datatables один из моих столбцов определяется следующим образом:

{data: "department.email"}

Это отображает email свойство accessor без проблем. Проблема возникает, когда я пытаюсь выполнить поиск или сортировку по этому столбцу:

Предупреждение DataTables: идентификатор таблицы = DataTables_Table_0 — Сообщение об исключении:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «partments.email »в« предложении where »

Очевидно, datatables не знает, что это средство доступа, и пытается включить его в запрос — с предсказуемыми результатами.

Единственный обходной путь, на который я мог найти ссылку, — это использование filterColumn метод, который позволяет определить пользовательский WHERE предложение для конкретного столбца. Но насколько я могу сказать это а) требует, чтобы вы определили столбец вручную с помощью построителя запросов, и б) работает только на модели напрямую, а не на одном из ее отношений.

Есть ли способ, которым я могу искать и сортировать это свойство аксессора так же, как я могу с «реальными» свойствами отношения?

0

Решение

Вы можете попробовать установить: https://github.com/babenkoivan/scout-elasticsearch-driver

Этот пакет предлагает возможность определения пользовательских правил для SQL-запросов.

Увидеть:

1

Другие решения

Попробуйте добавить аксессуар к модели.

class Department extends Model {

protected $appends = ['email'];

// the rest of your code
}

Примечание: атрибуты в appends массив также будет уважать visible а также hidden Настройки настроены на модель.

Источник: Добавление значений в JSON

0

По вопросам рекламы [email protected]