2016-06-24 4 views
0

У меня есть таблица app_sessions в моей базе данных с двумя уникальными ключами - device_id и device_token. Я хочу вставить новый сеанс в эту таблицу, только если запись с device_id или device_token не существует, иначе просто обновите сеанс для этой записи.по дубликатному обновлению ключа в laravel 5.0 eloquent

Мы можем сделать это с помощью запроса «insert .... on duplicate key update .....». Но как мы можем добиться этого, используя красноречивый ларавел 5.0.

Примечание: Мы все знаем другие способы сделать это, например, сначала извлекать запись, а затем вставлять или обновлять в зависимости от результатов.

ответ

0

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_updateOrCreate

User::updateOrCreate(['email'=>'[email protected]'],['name'=>'foobar']); 

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

+0

Я получил эту ошибку: MassAssignmentException в Model.php line 452: device_token. Когда я использовал эту функцию, я сохранил device_id, но другой device_token. Но функция updateOrCreate проверяет наличие и состояние столбцов (device_id и device_token). Джефф, ты задаешь мне вопрос? – janardhan

+0

Вам нужно иметь 'device_token' в массиве' $ fillable' на модели, если вы хотите обновить его с помощью массива. Первым массивом должны быть условия, которые вы хотите проверить, если они уже существуют, а второй - те, которые вы хотите обновить. – Jeff

+0

, но это не работает, если у нас есть два условия. Здесь нам нужно проверить, существует ли 'device_id' ** OR **' device_token'. Но функция 'updateOrCreate' принимает только' и условие'. – janardhan