如何雄辩地与多种结果建立关系

时间:2019-02-08 11:50:48

标签: laravel laravel-5 eloquent eloquent--relationship

问题

我有两个班级,用户和帖子。用户“ hasMany”发布,而用户“ belongTo”发布。但是,当我调用“ User :: all()”时,由于明显的原因,它不会自动拉出用户的帖子,因为如果我的用户与100个不同的表有关系,则拉动所有用户将变得非常笨拙。

问题

是否有一种方法可以在不经过foreach循环的情况下,将所有用户和所有user->帖子提取为一行或几行代码?

我知道我可以使用增幅器,但我的问题是我的字段称为user_id,我已经使用以下代码对其进行了测试:

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

但是它将用用户对象替换“ user_id”字段值,而是将其设置为结果中自己的“临时用户”字段。我正在寻找最佳实践!

谢谢。

1 个答案:

答案 0 :(得分: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;