2015-06-19 2 views
2

я использую Laravel FindOrNew(), чтобы получить запись с двумя параметрами, или создать новый:Laraver FindOrNew с несколькими параметрами

$option = \App\Option::findOrNew(['user_id' => $this->id , 'option_name' => $optionName]); 

Я хочу, чтобы получить возможность для пользователя, который имеет имя в $ optionName. Проблема в том, что он просто проверяет user_id и не создает новый, когда имя_параметра не существует. Вместо этого он «находит» тот, который не соответствует значению $ optionName.

Может кто-то сказать, что я «Неправильно? Как я могу это достичь?

ответ

8

TL; DR:

Вы используете неправильный метод. Вы ищете метод firstOrNew(), а не findOrNew().

Объяснение:

findOrNew() является продолжением find() метода, который работает только на ид. Он принимает два параметра, первый из которых - это идентификатор (или массив идентификаторов) для поиска, а второй - столбцы для извлечения. Он обрабатывает массив, который вы передали, в виде массива идентификаторов для поиска.

Метод firstOrNew() принимает один параметр: массив атрибутов для поиска. Он превратит массив в предложение where, а затем вызовет first() в построителе запросов. Если результаты не возвращаются, он возвращает новый экземпляр с заполненными атрибутами.

+0

Спасибо @patricus, я начал с firstOrNew, но использование его на том же пути дает мне исключение: MassAssignmentException в Model.php line 421: any идеи о том, что это такое? – raphadko

+1

Решил его, добавив в модель варианты заполнения. Спасибо, что указали направление! – raphadko