Laravel Eloquentで「With()」関数を使用して特定の列を取得する質問

Laravel Eloquentで「With()」関数を使用して特定の列を取得する質問

User2 つのテーブルとがありますPost。 1 つはUser複数のテーブルを持つことができposts、もう 1 つはpost1 つのテーブルにのみ属しますuser

私のモデルには関係UserがありますhasMany...

public function post(){
    return $this->hasmany('post');
}

そして私のpostモデルにはbelongsTo関係があります...

public function user(){
    return $this->belongsTo('user');
}

ここで、これら 2 つのテーブルを結合したいのですEloquent with()が、2 番目のテーブルの特定の列が必要です。クエリ ビルダーを使用できることはわかっていますが、使用したくありません。

モデルでPost書くときは...

public function getAllPosts() {
    return Post::with('user')->get();
}

次のクエリを実行します...

select * from `posts`
select * from `users` where `users`.`id` in (<1>, <2>)

でも私が欲しいのは...

select * from `posts`
select id,username from `users` where `users`.`id` in (<1>, <2>)

使用すると...

Post::with('user')->get(array('columns'....));

最初のテーブルの列のみが返されます。2with()番目のテーブルの特定の列を使用したいと考えています。どうすればいいでしょうか?

ベストアンサー1

解決策を見つけました。配列の2番目のインデックスとしてclosure関数を渡すことで実現できます。with()

Post::query()
    ->with(['user' => function ($query) {
        $query->select('id', 'username');
    }])
    ->get()

id他のテーブルからのみ選択しますusername。これが他の人の役に立つことを願っています。


実際に必要な結果を取得するには、主キー (この場合は id) が の最初のパラメータである必要があることに注意してください。*$query->select()

おすすめ記事