【问题标题】:Laravel get all with relationshipsLaravel 通过关系获得一切
【发布时间】:2016-10-08 09:40:23
【问题描述】:

我几天前开始使用 laravel。我在其他框架方面有很多经验,但我在 Eloquent ORM 和关系方面有点落后。

假设用户有另一个表来保存其统计信息。我创造了这种关系。现在用户也有很多帖子,所以我也声明了。

class User extends Authenticatable
{
    public function userDynamic()
    {
        return $this->hasOne('App\UserDynamic', 'user_id', 'id');
    }

    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

现在我们有其他型号:

class UserDynamic extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }

}

还有:

class Post extends Model
{
    public function user()
    {
        $this->belongsTo('App\User','user_id','id');
    }
}

我想我已经做到了这一点。尝试检索这些时出现问题。 对于一个用户,我很好,因为我不能

$user ( get user from auth token)
$user->stats = $user->userDynamic()->first();
$user->posts = $user->posts()->paginate($this->profilePagination);

这很好,我让用户拥有一个属性统计信息,其中包含所有信息和属性帖子中的帖子。

如果我试图让所有用户像下面这样

$users = User::with('userDynamic')->active()->notPrivate();
return $users->paginate($this->followersPagination);

所有用户都这样返回

  {
      "id": 26,
      "name": "LL",
      "url": "",
      "personal_quote": "",
      "private": "0",
      "active": "1",
      "user_dynamic": {
        "user_id": 26,
        "following_count": 7,
        "followers_count": 0,
        "posts_count": 0,
        "likes_count": 0
      }

如何更改分配给它们的属性名称?而不是 user_dynamic 说像统计数据。

【问题讨论】:

  • 只需将userDynamic() 函数重命名为您喜欢的任何名称。

标签: php laravel eloquent


【解决方案1】:

如果您打算保留 userDynamic 关系的名称,则只需为该关系添加别名:

public function stats()
{
    return $this->userDynamic();
}

【讨论】:

  • 我明白了,太好了!!如果我想对帖子做同样的事情怎么办?我怎么称呼它?也快速提问。如果我在那里添加帖子,是否会产生另一个 X(用户查询数据库的数量或它是否使用 JOIN)?
  • 据我所知,急切加载关系(就像你在这里所做的那样)基本上优化了你的查询,以尽量减少对数据库的调用次数,使用连接等。如果你想在与统计信息同时,只需将其添加到您雄辩查询的with 方法中,例如with(['posts', 'stats'] 并且您的相关帖子也将被急切加载:)
  • Yes 在几次搜索后设法找到了。欣赏!
猜你喜欢
  • 2017-10-18
  • 2015-06-29
  • 2019-11-21
  • 2022-01-23
  • 2020-01-15
  • 2021-12-02
  • 2022-01-12
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多