拉拉维尔如何获得我与之交谈过的所有用户


laravel how to get all the users i talked to

我现在正在与Laravel一起开发消息传递系统。现在,我想有一个当前用户向其发送消息/从中接收消息的用户列表。假设我有一个消息表,例如

id | sender_id | receiver_id | msg
1  | 1         | 2           | smadksamdksa
2  | 3         | 4           | hi
3  | 1         | 2           | www
4  | 2         | 1           | ssse
5  | 3         | 1           | hi 

找到获取与我交谈的用户的 ID 列表,用户 1 的结果将是

id
2
3

消息模型

namespace App;
use Illuminate'Database'Eloquent'Model;
class msg extends Model
{
    protected $table = 'msgs';
    public function user()
    {
        return $this->belongsTo('App'user');
    }
}

我所做的查询

$senders = msg::select('sender_id')->where('receiver_id', '=', Auth::id())->distinct()->get();
$peopleUserTalkedTo = msg::select('receiver_id')->where('sender_id', '=', Auth::id())->distinct()->union($senders)->get();

但它不适用于错误

Undefined property: Illuminate'Database'Eloquent'Collection::$bindings

它有什么问题,我可以选择发送方 ID 和接收方 AS ID 吗,以后我可以从中获取用户 ID 吗?

我认为问题在于工会方法。

你应该像这样定义你的模型:

namespace App;
use Illuminate'Database'Eloquent'Model;
class msg extends Model
{
    protected $table = 'msgs';
    public function sender()
    {
        return $this->belongsTo('App'user','sender_id');
    }
    public function receiver()
    {
        return $this->belongsTo('App'user','receiver_id');
    }    
}

namespace App;
use Illuminate'Database'Eloquent'Model;
class user extends Model
{
    public function talkedTo()
    {
        return $this->hasMany('App'msg','sender_id');
    }
    public function relatedTo()
    {
        return $this->hasMany('App'msg','receiver_id');
    }
}

现在尝试像这样获取与您交谈过的人:

Auth::user()->talkedTo()->get();
Auth::user()->relatedTo()->get();

更新

要仅获取与您交谈或与之相关的人的 ID,请遵循代码:

Auth::user()->talkedTo->pluck('id');
Auth::user()->relatedTo->pluck('id');
并没有

真正得到你想要的,但是在确保将其添加到您的用户模型中后尝试此操作

class user extends Model
{
    public function msgs()
    {
        return $this->hasMany('App'msg');
    }
}

然后

$mymsgs = Auth::user()->msgs->get(); //collection of all msgs

然后你可以使用 foreach 循环