Я создаю бэкэнд-панель для веб-сайта с Laravel Backpack. Это действительно хорошо, но я заметил, что запросы на отношения очень дороги.
У меня есть две модели: Товар а также Центр со многими отношениями между ними. В моем CenterCrudController я определил поле следующим образом:
$this->crud->addColumns([
// More fields...
[
'label' => 'Products',
'type' => 'select2_multiple',
'name' => 'products', // the method that defines the relationship in your Model
'entity' => 'products', // the method that defines the relationship in your Model
'attribute' => 'name', // foreign key attribute that is shown to user
'model' => 'App\Models\Product', // foreign key model
'pivot' => true, // on create&update, do you need to add/delete pivot table entries?
],
// More fields...
]);
Он отлично работает, показывая несколько полей со связанными моделями. Но используемый запрос SELECT * FROM products
, что очень дорого (таблицы продуктов имеют тысячи записей с около 25 столбцами).
В этом примере мне нужно только Я бы а также название поля. Я ищу что-то вроде Query Builder select()
метод.
Есть ли способ оптимизировать этот тип запроса?
Заранее спасибо!
Не уверен, что это действительно ответ, но я все равно выложу.
Лучшее решение (как указано @tabacitu) использовало select2_from_ajax field
, Это не замедляет загрузку страницы и делает ajax-запрос на получение данных только тогда, когда пользователь нажимает на поле выбора.
Других решений пока нет …