使用Auth::User的Laravel查询

3

我该如何修改我的代码:

<?php $titles = DB::table('messages')->pluck('text');

foreach ($titles as $title) {
    echo $title;
}
 ?>

接收来自用户ID的数据,例如:

FROM messages->title FROM THE USER WITH THE `id`

我希望显示一个用户发送的所有消息。
谢谢。

你没有设置关联吗?如果没有,你应该这样做:在user模型上设置一个名为messages的关联,然后你就可以使用$user->messages->received();方法。receivedmessages模型上的自定义方法,它只返回用户接收到的消息,而不是发送的消息。 - Andy Holmes
展示你的数据库架构,消息和用户表模型,控制器代码。 - Sohel0415
2个回答

4
如果您不使用关系:
DB::table('messages')->where('user_id', auth()->id())->pluck('text')

或者你可以在 Message 模型中定义关系:

public function user()
{
    return $this->belongsTo(User::class);
}

然后加载消息:

$messages = auth()->user()->messages;

或者只是懒加载当前用户的消息,以备后用:

auth()->user()->load('messages');

除非 OP 使用“非常规”模式,否则 id 将指代消息 ID。 - Naravia
非常感谢,我可以将它排序在一个列表中,每行一个吗?并且是否可以按创建日期排序显示对话,例如:第一行来自发送者,第二行来自接收者? - therubby
使用@therubby来排序消息auth()->user()->messages()->latest()->get()。如果你想先显示旧的消息,可以使用oldest()代替latest() - Alexey Mezenin
@therubby 不,你也可以在第一个查询中使用它。在pluck()之前加上latest()oldest()即可。 - Alexey Mezenin
1
谢谢你的帮助朋友 :) - therubby

0
DB::table('messages')->where('user_id', '=', Auth::user()->id)->pluck('text');

这应该能解决问题


非常感谢,我可以将它排序在一个列表中,每行一个吗?并且是否可以按创建日期排序显示对话,例如:第一行来自发送者,第二行来自接收者? - therubby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接