如何 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;