Я делаю приложение для обмена сообщениями, и мне нужно проверить, существует ли уже разговор, который имеет определенный список пользователей (не более, не менее). У меня есть эта модель:Laravel получить разговор, где пользователи в массиве
class Conversation{
public function users(){
return $this->belongsToMany('App\User');
}
public function messages(){
return $this->hasMany('App\Message');
}
}
У меня есть эти таблицы:
разговоры:
- ID
- user_id < - владелец разговора
пользователей:
- ID
- электронной
- пароль
conversation_user:
- ID
- conversation_id
- user_id
Я хочу сделать пост запрос, как это:
{
"users": [1,4,6], <- user ids
"message": "Some message"
}
Если разговор уже существует со всеми и только для пользователей 1,4,6, сообщение должно быть добавлено к этому разговору, чтобы избежать повторяющихся разговоров в база данных. В противном случае я сделаю новый разговор с указанными пользователями. Это лучшее, что я был в состоянии сделать до сих пор:
$existing_conversation = $user->conversations()->whereHas('users',
function($query) use ($data){
$query->whereIn('user_id', $data['users']);
}
)->has('users', '=', count($data['users']));
Но это просто возвращает разговоры, что имеет именно количество пользователей, которые были в массиве пользователей. Он игнорирует внутренний запрос.
У кого-нибудь есть идея? :)
Эй @Donkarnash. Это не имело никакого значения :( – Bisgaard
Непонятно из представленного кода, кажется, что модели «Разговор и пользователь» разделяют отношение «многие ко многим» через сводную таблицу. В этом случае, как вы можете проверить user_id на разговоры?Пожалуйста, предоставьте таблицу и подробную информацию о модели пользователя и разговора для понимания вашей текущей структуры кода. – Donkarnash
Привет, @Donkarnash. Ты буйный. Я редактировал вопрос, чтобы включить структуру таблицы. convers_user - сводная таблица. – Bisgaard