如何仅在Laravel关系中选择一些列?

时间:2016-11-09 11:47:37

标签: php laravel eloquent

我有以下数据库结构:

  • 用户

    • ID
    • 名称
    • ID
    • USER_ID
    • 标题
    • 含量

所以我在模型中创建了关系函数:

class User extends Model {
   public function post()
   {
      return $this->hasMany(Post::class);
   }
}

如果我执行$user->post将返回完整的帖子对象。

如何才能获得帖子ID?

3 个答案:

答案 0 :(得分:1)

你可以这样做

$user = User::with(['post' => function ($q) {
            $q->select('id');
        }])->where('id', $id)->first();

或者您可以设置选择关系

public function post()
   {
      return $this->hasMany(Post::class)->select(['id','user_id']);
   }

答案 1 :(得分:1)

至少需要user_id才能使其正常工作。

public function post() {
    return $this->hasMany(Post::class)->select(['id', 'user_id']);
}

如果您不想针对特定情况展示它;尝试:

$user->post->each(function($post) {
    $post->setVisible(['id']);
});

这样你也可以摆脱user_id。

答案 2 :(得分:0)

为了获得一个id列表而不是eloquent模型,我将使用查询构建器。

DB::table('posts')
    ->select('posts.id') // fetch just post ID
    ->join('users', 'posts.user_id', '=', 'users.id')
    ->where('users.id', ...) // if you want to get posts only for particular user
    ->get()
    ->pluck('id'); // results in array of ids instead of array of objects with id property

为了使其正常工作,您需要在同一个文件中添加use DB;