如何 eloquent 与多个结果的关系
How to eloquent relationship with multiple results
问题
我有两个 类,用户和帖子。一个用户 "hasMany" post 和一个 post "belongTo" 用户。但是当我调用 "User::all()" 时,由于显而易见的原因,它不会自动拉取用户 posts,因为如果我的用户与 100 个不同的表有关系,那么拉取所有用户将开始变得相当笨拙。
问题
有没有办法在一行或几行代码中拉取所有用户和所有用户->post,而无需通过 foreach 循环?
我知道我可以使用修改器,但我遇到的问题是我的字段名为 user_id,我已经使用以下代码对其进行了测试:
public function getUserIdAttribute($id)
{
return User::find($id);
}
但它会将 "user_id" 字段值替换为用户对象,我宁愿在结果中将其设置为自己的 "temporary user" 字段。我正在努力寻找最佳实践!
提前谢谢你。
您要找的是Eager Loading
在您的 post 模型中:
class Post extends Model
{
protected $table='posts';
public $primaryKey='id';
public function user(){
return $this->belongsTo('App\User','user_id');
}
}
现在你想通过用户使用以下代码获得 post:
$posts=Post::with('user')->get();
在您的用户模型中:
class User extends Model
{
public function posts(){
return $this->hasMany('App\Model\Post');
}
}
现在您想要获得所有 post 的用户:
$user=User::where('id',$id)->first();
$user_posts=$user->posts;
问题
我有两个 类,用户和帖子。一个用户 "hasMany" post 和一个 post "belongTo" 用户。但是当我调用 "User::all()" 时,由于显而易见的原因,它不会自动拉取用户 posts,因为如果我的用户与 100 个不同的表有关系,那么拉取所有用户将开始变得相当笨拙。
问题
有没有办法在一行或几行代码中拉取所有用户和所有用户->post,而无需通过 foreach 循环?
我知道我可以使用修改器,但我遇到的问题是我的字段名为 user_id,我已经使用以下代码对其进行了测试:
public function getUserIdAttribute($id)
{
return User::find($id);
}
但它会将 "user_id" 字段值替换为用户对象,我宁愿在结果中将其设置为自己的 "temporary user" 字段。我正在努力寻找最佳实践!
提前谢谢你。
您要找的是Eager Loading
在您的 post 模型中:
class Post extends Model
{
protected $table='posts';
public $primaryKey='id';
public function user(){
return $this->belongsTo('App\User','user_id');
}
}
现在你想通过用户使用以下代码获得 post:
$posts=Post::with('user')->get();
在您的用户模型中:
class User extends Model
{
public function posts(){
return $this->hasMany('App\Model\Post');
}
}
现在您想要获得所有 post 的用户:
$user=User::where('id',$id)->first();
$user_posts=$user->posts;