У мене питання про красномовний Laravel. Я створив декілька таблиць і моделей, приблизно так:
Подорож
- ідентифікатор
- ім'я
- користувач
Користувач
- ідентифікатор
- електронна пошта
повідомлення
- ідентифікатор
- зміст
- поїздка
- користувач
Як я можу отримати всі повідомлення для одного користувача за допомогою всіх зовнішніх ключів? Ви знаєте, всі дані з цих таблиць. Подобається це:
[
1 => [
"content",
"trip" => [
"name"
],
"user" => [
"email"
]
]
]
Можливо, простий спосіб отримати всі дані?
Мої моделі:
// Message.php:
public function user()
{
return $this->belongsTo("AppUser");
}
public function trip()
{
return $this->belongsTo("AppTrip");
}
// Trip.php:
public function user()
{
return $this->belongsTo("AppUser");
}
// User.php:
public function trips()
{
return $this->hasMany("AppTrip");
}
public function messages()
{
return $this->hasMany("AppMessage");
}
Мій код
dd(
User::with([
"sent",
"recipient"
])->find(2)->toArray()
);
І що я хочу отримати:
Відповіді:
1 для відповіді № 1Я вважаю, ви шукаєте метод навантаження.
Скажімо, у вас є користувач
$user->load("messages"); // var_dump($user);
Якщо ви вкажете користувацький об’єкт, ви побачите, що відповідні повідомлення були завантажені.
0 для відповіді № 2
Використовуйте прагнення до завантаження.
Спробуйте це:
$users = User::with([
"messages.trip",
])->get();
dd($users);
Ref: https://laravel.com/docs/5.3/eloquent-relationships#eager-loading