Laravel过滤关系字段

时间:2015-09-07 02:28:49

标签: laravel

我有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
}]

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;
});