#php #laravel #vue.js
#php #laravel #vue.js
Вопрос:
Я начинаю изучать, как использовать Vue и Laravel. Итак, я пишу некоторые компоненты Vue для замены некоторых частей лезвий.
В моем приложении у меня есть Sugerencia
(предлагаемая) модель. Конечно, у меня есть users
модели и многие другие, но мне нужны эти две для этого вопроса
Мой SugerenciaController@index
довольно простой:
public function index()
{
$sugerencias = Sugerencia::orderBy('created_at', 'desc')
->with('user')
->paginate(10);
return view('sugerencias.index', compact('sugerencias'));
}
В моем sugerencias/index.blade.php
я «отправляю» $sugerencia
в Vue с:
@foreach ($sugerencias as $sugerencia)
...
<user-info :sugerencia="{{ $sugerencia }}"></user-info>
...
@endforeach
И работает так, как задумано. user-info
это компонент Vue, который форматирует и отображает информацию пользователя. В Vue для доступа к имени пользователя я использую {{ sugerencia.user.name }}
в своем шаблоне. Пока все хорошо. Но это работает только в коллекции.
Тогда у меня есть свой SugerenciaController@show
метод, который так же прост, как
public function show(Sugerencia $sugerencia) {
return view('sugerencias.show', compact('sugerencia'));
}
Я предположил, что в моем sugerenciasshow.blade.php
я мог бы использовать тот же вызов для компонента user-info
Vue, что и:
...
<user-info :sugerencia="{{ $sugerencia}}"></user-info>
...
… но я не могу, так как это не «отправка» user
отношения. Я предполагаю, что это потому, что я не использую ->with('user')
, как я делал в коллекции.
В mounted()
методе, который я разместил console.log(this.sugerencia)
, и я получаю все данные sugerencia, но не данные пользователя (только user_id
внешний ключ)
Итак, вопрос в том, как мне «добавить» user
отношение к sugerencia
модели, вроде как нетерпеливая загрузка. Я хочу сделать что-то такое же тривиальное, как $sugerencia->user->name
в ORM
Пожалуйста, простите меня, если мой английский недостаточно понятен, и не стесняйтесь редактировать
Ответ №1:
Честно говоря, я бы отделил логику здесь и загрузил страницу и компонент vue с нулевым значением, а затем выполнял запросы ajax для получения требуемых данных. Или реализовать стандартизированный способ получения данных от контроллера к компонентам vue без наличия определенных переменных в моих view
шаблонах блейда.
Однако для вашего конкретного вопроса вы могли бы использовать отложенную загрузку eagar следующим образом:
public function show(Sugerencia $sugerencia) {
$sugerencia->load('user');
return view('sugerencias.show', compact('sugerencia'));
}
Из документов:
Иногда вам может потребоваться загрузить отношения после того, как родительская модель уже была извлечена. Например, это может быть полезно, если вам нужно динамически решать, загружать ли связанные модели:
Комментарии:
1. Отлично! Да, это решает мою проблему. Как я уже сказал, я начинаю с Vue. Итак, лучший способ сделать то, что я хочу, — это
axios
вызвать загрузку компонента для получения пользовательских данных? почему?2. Я имею в виду, что в индексе это не будет похоже на проблему запроса n 1? Не эффективнее ли выполнить один запрос? Просто хочу узнать
3. На мой взгляд, да, получение ВСЕХ данных через ajax, потому что тогда вы можете начать создавать свое приложение vue с отдельными компонентами, которые все независимы друг от друга, как «модули». Вам не обязательно использовать ajax для всего, вы все равно можете передавать данные при загрузке страницы, но я бы не хотел делать это напрямую
<user-info :sugerencia="{{ $sugerencia}}"></user-info>
. Если вы хотите опубликовать новый вопрос с тем же кодом и задать что-то вроде «Как я могу передать данные из моего бэкэнда laravel в мое приложение vue без использования блейд-логики», я был бы рад показать вам пример4. Я пытался, но он говорит, что он дублируется… позвольте мне попробовать и опубликовать еще раз с меньшим кодом. Я действительно ценю ваше время и знания, а также готовность поделиться