我现在正在开发一个带有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吗?
我认为问题在于联合方法。
答案 0 :(得分:4)
您应该像这样定义模型:
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');
答案 1 :(得分:0)
并没有真正得到你想要的东西,但在确定将此添加到你的用户模型后试试这个
class user extends Model
{
public function msgs()
{
return $this->hasMany('App\msg');
}
}
,然后强>
$mymsgs = Auth::user()->msgs->get(); //collection of all msgs
然后你可以使用foreach循环