Подтвердить что ты не робот

Первый или Создать

Я знаю, используя:

User::firstOrCreate(array('name' => $input['name'], 'email' => $input['email'], 'password' => $input['password']));

Проверяет, существует ли пользователь первым, если он не создает его, но как он проверяет? Проверяет ли он все предоставленные параметры или есть способ указать конкретный параметр, например. могу ли я просто проверить, что адрес электронной почты существует, а не имя - поскольку два пользователя могут иметь одинаковое имя, но их адрес электронной почты должен быть уникальным.

4b9b3361

Ответ 1

firstOrCreate() проверяет наличие всех аргументов перед finds совпадением. Если не все аргументы совпадают, то будет создан новый экземпляр модели.

Если вы хотите только проверить конкретное поле, используйте firstOrCreate(['field_name' => 'value']) только с одним элементом массива. Это вернет первый элемент, который соответствует или создает новый, если не найдено совпадений.

Разница между firstOrCreate() и firstOrNew():

  • firstOrCreate() автоматически создаст новую запись в базе данных, если она не найдена. В противном случае он предоставит вам соответствующий элемент.
  • firstOrNew() предоставит вам новый экземпляр модели для работы, если совпадение не найдено, но будет сохранено только в базе данных, когда вы это явно сделаете (вызов save() в модели). В противном случае он предоставит вам соответствующий элемент.

Выбор одного или другого зависит от того, что вы хотите сделать. Если вы хотите изменить экземпляр модели до ее сохранения в первый раз (например, установите name или какое-либо обязательное поле), вы должны использовать firstOrNew(). Если вы можете просто использовать аргументы для немедленного создания экземпляра новой модели в базе данных без его модификации, вы можете использовать firstOrCreate().

Ответ 2

Предыдущий ответ устарел. Это возможно сделать за один шаг, так как Laravel 5.3, firstOrCreate теперь имеет второй параметр values, который используется для новой записи, но не для поиска

$user = User::firstOrCreate([
    'email' => '[email protected]'
], [
    'firstName' => 'Taylor',
    'lastName' => 'Otwell'
]);

Ответ 3

Обновление:

По сравнению с Laravel 5.3 это делается за один шаг; метод firstOrCreate теперь принимает необязательный второй массив в качестве аргумента.

Первый аргумент массива - это массив, по которому сопоставляются поля/значения, а второй массив - дополнительные поля, используемые при создании модели, если совпадение не найдено путем сопоставления полей/значений в первом массиве

См. документацию

Ответ 4

firstOrCreate() проверяет все присутствующие аргументы, прежде чем найдет совпадение.

Если вы хотите проверить только определенное поле, используйте firstOrCreate (['field_name' => 'value']), например,

$user = User::firstOrCreate([
    'email' => '[email protected]'
], [
    'firstName' => 'abcd',
    'lastName' => 'efgh',
    'veristyName'=>'xyz',
]);

Тогда он проверяет только электронную почту