获取每条消息的用户个人资料照片

Get user profile photo for each message

我需要在聊天室中显示每个用户的独特照片。 LaravelJetstream

正在获取用户消息

 {{ message.message}}

最初我有,但后来意识到它只能获取当前登录用户的照片。

:src="$page.props.user.profile_photo_url

我需要定义一个 has one 关系并调用如下内容:

获取与用户账号对应的用户id

 {{ message.user_id}}

然后从用户 table 列获取个人资料照片位置,但我似乎无法正常工作

 {{ user->where('id','=',message.user_id)->value(photo_location) }}

你的代码的最后一行不正确,但我认为它不需要修复,因为在查询数据时你所做的是一个非常糟糕的做法。

假设您在一个页面中显示 50 条消息。在这种情况下,您必须进行 50 次额外查询才能获取用户照片。这会降低您应用的性能。这就是为什么您需要将用户数据附加到消息中的原因。您只需要在控制器中添加以下内容即可。

$messages = Message::with('user')->...->get();

如果用户 table 有个人资料照片的外键,您的查询应该是:

$messages = Message::with('user.relation_name')->...->get();

在blade中,您将拥有您需要的所有用户数据,并像

一样使用它
{{ message->user->profile_photo_url }}

要完成这项工作,您需要 one-to-many User 和 Message 模型之间的关系,我假设您已经知道了。如果你不检查文档。很简单。

********** /编辑/

关系

聊天消息模型

public function user(){
    return $this->hasOne('App\Models\ChatRoom','id','user_id');
}

消息控制器

    $messages= ChatMessage::where('chat_room_id','=',$roomId)
    ->with('user')
    ->orderBy('created_at','DESC')
    ->get();

然后在 vue 中尝试测试并获取消息的用户 ID,但不起作用

{{ message.user.id }}