Get Specific Columns Using “With()” Function in Laravel Eloquent

后端 未结 13 2135
清酒与你
清酒与你 2020-11-22 16:57

I have two tables, User and Post. One User can have many posts and one post belongs to only one user

相关标签:
13条回答
  • 2020-11-22 17:34

    I came across this issue but with a second layer of related objects. @Awais Qarni's answer holds up with the inclusion of the appropriate foreign key in the nested select statement. Just as an id is required in the first nested select statement to reference the related model, the foreign key is required to reference the second degree of related models; in this example the Company model.

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

    Additionally, if you want to select specific columns from the Post model you would need to include the user_id column in the select statement in order to reference it.

    Post::with(['user' => function ($query) {
            $query->select('id', 'username');
        }])
        ->select('title', 'content', 'user_id')
        ->get();
    
    0 讨论(0)
  • 2020-11-22 17:35

    You can also specify columns on related model at the time of accessing it.

    Post::first()->user()->get(['columns....']);

    0 讨论(0)
  • 2020-11-22 17:38

    Now you can use the pluckmethod on a Collection instance:

    This will return only the uuid attribute of the Post model

    App\Models\User::find(2)->posts->pluck('uuid')
    => Illuminate\Support\Collection {#983
         all: [
           "1",
           "2",
           "3",
         ],
       }
    
    0 讨论(0)
  • 2020-11-22 17:40

    In Laravel 5.7 you can call specific field like this

    $users = App\Book::with('author:id,name')->get();
    

    It is important to add foreign_key field in the selection.

    0 讨论(0)
  • 2020-11-22 17:42

    You can do it like this since Laravel 5.5:

    Post::with('user:id,username')->get();
    

    Care for the id field and foreign keys as stated in the docs:

    When using this feature, you should always include the id column and any relevant foreign key columns in the list of columns you wish to retrieve.

    For example, if the user belongs to a team and has a team_id as a foreign key column, then $post->user->team is empty if you don't specifiy team_id

    Post::with('user:id,username,team_id')->get();
    
    0 讨论(0)
  • 2020-11-22 17:47

    Well I found the solution. It can be done one by passing a closure function in with() as second index of array like

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

    It will only select id and username from other table. I hope this will help others.


    Remember that the primary key (id in this case) needs to be the first param in the $query->select() to actually retrieve the necessary results.*

    0 讨论(0)
提交回复
热议问题