laravel如何获得我与之交谈的所有用户

时间:2016-04-27 03:56:42

标签: php sql laravel

我现在正在开发一个带有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吗?

我认为问题在于联合方法。

2 个答案:

答案 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循环