Как выразить отношения с несколькими результатами - PullRequest
0 голосов
/ 08 февраля 2019

Проблема

У меня есть два класса, пользователи и сообщения.Пользователь "hasMany" сообщения и сообщение "принадлежат" пользователю.Но когда я вызываю «User :: all ()», он автоматически не извлекает сообщения пользователей по понятным причинам, потому что, если бы мой пользователь имел отношения к 100 различным таблицам, то при перетягивании всех пользователей он становился бы довольно коротким.

Вопрос

Есть ли способ вытащить всех пользователей и все пользовательские сообщения в одну или несколько строк кода без прохождения цикла foreach?

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

public function getUserIdAttribute($id)
{
    return User::find($id);
}

Но он заменит значение поля "user_id" на объект пользователя, скорее всего Idустановите в своем собственном поле «временный пользователь» в результате.Я пытаюсь найти лучшую практику!

Заранее спасибо.

1 Ответ

0 голосов
/ 08 февраля 2019

То, что вы ищете, называется Стремительная загрузка

Внутри вашей почтовой модели:

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;
...