Laravel从急切的负载中获得一个值

I've got this query in Laravel that's returning all forums with some extra information:

return Forum::with(['messages.user' => function($query){
    $query->select('id', 'name');
}])->withCount('messages')->paginate(10);

but now it eager loads all related messages as well but I only need the author from a message. How could I get this result?

Assuming the table you have for your Message model is messages and that it has the columns forum_id and user_id, and the table for your User model is users you could just define a belongsToMany and get the information that way:

public function users()
{
    return $this->belongsToMany(User::class, 'messages')->distinct();
}

then:

return Forum::with(['users' => function($query){
     $query->select('users.id', 'users.name');
}])->withCount('messages')->paginate(10);

Hope this helps!

Without eager loading,

//for a particular forum

//Get a forum entity

$forum = Forum::find($id);

// Get its messages as a Collection

$forumMessages = $forum->messages;

// Iterate over each message on the Collection to find its author. This will look for id in the User model based on the 'author_id' stored by you in the message table.The collection $forumMessages will now have the author's name. This is just to give you an idea. Structure accordingly to your needs.

 $forumMessages->each(function ($message){
  $message->author = User::find($message->author_id)->name;
});

Try using

return Forum::with([
    'messages' => function ($messages) {
        return $messages->with([
            'user' => function ($user) {
                return $user->select('id', 'name');
            }
        ])->select('id', 'author'); // you get author from messages
    }
])->withCount('messages')->paginate(10);

This also eager loads but you only get id and author. id is needed to make the relationship with user.