我现在正在与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 循环