问题
我有两个班级,用户和帖子。用户“ hasMany”发布,而用户“ belongTo”发布。但是,当我调用“ User :: all()”时,由于明显的原因,它不会自动拉出用户的帖子,因为如果我的用户与100个不同的表有关系,则拉动所有用户将变得非常笨拙。
问题
是否有一种方法可以在不经过foreach循环的情况下,将所有用户和所有user->帖子提取为一行或几行代码?
我知道我可以使用增幅器,但我的问题是我的字段称为user_id,我已经使用以下代码对其进行了测试:
public function getUserIdAttribute($id)
{
return User::find($id);
}
但是它将用用户对象替换“ user_id”字段值,而是将其设置为结果中自己的“临时用户”字段。我正在寻找最佳实践!
谢谢。
答案 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;