select2_from_ajax_multiple оптимизировать запрос для laravel

У меня есть 2 таблицы:

1. Users
2. Tags

tags_users — это сводная таблица.

Эти таблицы имеют отношение «многие ко многим».

Почему addField в моем UserCrudController делает слишком много запросов, когда результат доступен из одного запроса?

Пример:

Когда я редактирую пользователя с несколькими тегами, addField делает следующие запросы:

select * from `tags` where `tags`.`id` = '11' limit 1;
select * from `tags` where `tags`.`id` = '13' limit 1;
select * from `tags` where `tags`.`id` = '14' limit 1;
select * from `tags` where `tags`.`id` = '57' limit 1;

Я понимаю, что select2_from_ajax должен делать запрос AJAX каждый раз, когда я получаю новую информацию, но как насчет того, чтобы просто получить первый выбранный результат из объекта User?

Вот так: User::find(1)->tags. Это возвращает коллекцию тегов для пользователя и позволяет избежать нескольких запросов для получения одного и того же результата.

Это мой UserCrudController:

http://sandbox.onlinephpfunctions.com/code/023c2eb5749180967efe0a24dbb7125d95815537

Это часть кода:

$this->crud->addField([ // Select2Multiple = n-n relationship (with pivot table)
        'label' => 'Tags',
        'type' => 'select2_from_ajax_multiple_custom',
        'name' => 'tags', // the method that defines the relationship in your Model
        'entity' => 'tags', // the method that defines the relationship in your Model
        'attribute' => 'name', // foreign key attribute that is shown to user
        'model' => Tag::class, // foreign key model
        'data_source' => route("search.tags"),
        'placeholder' => "Select a city",
        'minimum_input_length' => 2, // minimum characters to type before querying results
        'pivot' => true, // on create&update, do you need to add/delete pivot table entries?
]);

person Hansz    schedule 05.10.2017    source источник
comment
Я не уверен, что вы имеете в виду, говоря select2_from_ajax, я не знаю, является ли это библиотекой JS или чем-то, чего я не знал о Laravel... Что я могу сказать, так это то, что, возможно, вам нужно сделать Нетерпеливая загрузка, и вы сделаете только 1 запрос.   -  person matiaslauriti    schedule 06.10.2017
comment
Можете ли вы отредактировать свой вопрос, включив в него код контроллера, где вызывается addField? Если вы не возражаете, также поделитесь снимком экрана вашего обработанного шаблона.   -  person Oluwafemi Sule    schedule 07.10.2017
comment
я обновил вопрос   -  person Hansz    schedule 09.10.2017


Ответы (1)


Насколько я знаю, именно так работает функциональность AJAX select2. Каждый раз, когда они отправляют вызов AJAX, они отправляют все собранные данные. Не только то, что было добавлено. Таким образом, если у вас уже выбрано несколько записей, для каждой из них будет выполнен вызов SQL...

person tabacitu    schedule 10.11.2017