У меня есть запрос на получение сообщений:
public function getMessagesFor($id)
{
$messages = Message::where(function($q) use ($id) {
$q->where('from', auth()->id());
$q->where('to', $id);
})->orWhere(function($q) use ($id) {
$q->where('from', $id);
$q->where('to', auth()->id());
})->get();
}
и эта логика работает как надо, без ошибок все ок. Теперь я хочу получать сообщения напрямую через модель связи с другим пользователем (не аутентифицированным)
так в пользовательской модели я написал:
public function messages()
{
return $this->hasMany(Message::class, 'to', 'id')
->where('messages.from', auth()->id());
}
И это в основном дает тот же результат, что и предложение first where в функции getMessages. Это соотношение работает нормально.
Проблема в том, что я не знаю, как кодировать вторую часть предложения where. У меня нет доступа к $id
в моей модели, так как мне подойти к этому? Есть идеи, как его кодировать?
редактировать: миграция сообщений:
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');
$table->integer('from')->unsigned();
$table->integer('to')->unsigned();
$table->boolean('read')->default(false);
$table->integer('offer_id')->nullable();
$table->mediumText('body')->nullable();
$table->timestamps();
});