2

问题

我有两个课程,用户和帖子。用户“hasMany”发布和发布“belongTo”用户。但是当我调用“User::all()”时,由于显而易见的原因,它不会自动拉取用户的帖子,因为如果我的用户与 100 个不同的表有关系,拉动所有用户会开始变得非常粗暴。

问题

有没有一种方法可以在一行或几行代码中提取所有用户和所有用户->帖子,而无需通过 foreach 循环?

我知道我可以使用 mutator 但我遇到的问题是我的字段被称为 user_id 并且我已经使用以下代码对其进行了测试:

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

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

先感谢您。

4

1 回答 1

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;
于 2019-02-08T12:04:12.097 回答