У меня есть следующие модели:
<?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 ) вdatatable с разбивкой на страницы на стороне сервера / сортировкой / поиском:
<?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
для определенного столбца.Но, насколько я могу судить, a) требует, чтобы вы определяли столбец вручную с помощью построителя запросов, а b) работает только с моделью напрямую, а не с одним из ее отношений.
Можно ли как-то искать и сортировать это свойство аксессора так же, как и с "реальными" свойствами отношения?