Как выразить отношения с несколькими результатами

проблема

У меня есть два класса, пользователи и сообщения. Пользователь "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;
Другие вопросы по тегам