Как выразить отношения с несколькими результатами
проблема
У меня есть два класса, пользователи и сообщения. Пользователь "hasMany" сообщения и сообщение "принадлежат" пользователю. Но когда я вызываю "User::all()", он автоматически не извлекает сообщения пользователей по очевидным причинам, потому что, если бы мой пользователь имел отношения к 100 разным таблицам, то при перетягивании всех пользователей он становился бы довольно коротким.
Вопрос
Есть ли способ вытащить всех пользователей и все пользовательские сообщения в одну или несколько строк кода, не проходя цикл foreach?
Я знаю, что могу использовать мутатор, но у меня проблема в том, что мое поле называется user_id, и я проверил его с помощью этого кода:
public function getUserIdAttribute($id)
{
return User::find($id);
}
Но он заменит значение поля "user_id" на пользовательский объект, я бы скорее установил его в собственное поле "временный пользователь" в результате. Я пытаюсь найти лучшую практику!
Заранее спасибо.
1 ответ
То, что вы ищете, называется Eager Loading
Внутри вашей почтовой модели:
class Post extends Model
{
protected $table='posts';
public $primaryKey='id';
public function user(){
return $this->belongsTo('App\User','user_id');
}
}
Теперь вы хотите получить сообщение с использованием кода ниже:
$posts=Post::with('user')->get();
внутри вашей пользовательской модели:
class User extends Model
{
public function posts(){
return $this->hasMany('App\Model\Post');
}
}
Теперь вы хотите получить пользователя со всеми сообщениями:
$user=User::where('id',$id)->first();
$user_posts=$user->posts;