我有users
表和posts
表格['title', 'body', 'user_id', 'id']
,并且只有一对一的关系。
如何使用关系过滤仅显示posts
字段的body
表格。
e.g。
$users = User::with('post')->get();
,结果将是
[{
'username':'jrsalunga',
'post_id': 1,
'post': {'title': 'sample title'}, // show title only
'id': 2
}]
答案 0 :(得分:1)
你也可以在with()中添加一个闭包函数,如
$users = User::with([
'posts' => function ($query) {
$query->select('title', 'user_id');
}
])->get();
请记住添加外键(user_id),否则您将从帖子关系中获得空值
此外,我认为您需要将您的关系更改为一对多,例如
用户模型
public function posts()
{
return $this->hasMany('App\Post');
}
发布模型
public function user()
{
return $this->belongs('App\User');
}
答案 1 :(得分:0)
至少,您还必须从帖子中选择user_id
,因此Eloquent无法自动处理。
以下是您自己如何映射它们的方法:
$users = User::with('post')->get()->map(function ($user) {
$user = $user->toArray();
$user['post'] = array_only($user['post'], 'title');
return $user;
});