几天前我开始使用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那样说明统计数据。
答案 0 :(得分:0)
如果您打算保留userDynamic
关系的名称,则只需添加该关系的别名即可:
public function stats()
{
return $this->userDynamic();
}