laravel как получить всех пользователей, с которыми я разговаривал

82
11

Теперь я работаю над системой обмена сообщениями с 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

я найду список идентификаторов пользователя, с которым я разговаривал, результат для пользователя 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

что с ним не так, и я могу выбрать идентификатор отправителя и идентификатор AS-получателя, могу ли я получить идентификатор пользователя от него позже?

Я думаю, проблема связана с методом объединения.

спросил(а) 2016-04-27T06:56:00+03:00 4 года, 5 месяцев назад
1
Решение
90

Вы должны определить свои модели следующим образом:

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();

обновленный

Для получения только идентификаторов людей, с которыми вы говорили или связанных с ними, следуйте коду:

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

ответил(а) 2016-04-27T07:44:00+03:00 4 года, 5 месяцев назад
41

didnt реально получить то, что вы хотите, но попробуйте это после того, как обязательно добавьте это в пользовательскую модель пользователя ur

class user extends Model
{

public function msgs()
{
return $this->hasMany('App\msg');
}
}

тогда

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

и затем вы можете использовать цикл foreach

ответил(а) 2016-04-27T07:44:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема