我知道使用:
User::firstOrCreate(array('name' => $input['name'], 'email' => $input['email'], 'password' => $input['password']));
首先检查用户是否存在,如果没有创建,那么如何检查?它会检查提供的所有参数还是有办法指定特定的参数,例如,我可以检查电子邮件地址是否存在,而不是名称吗?因为两个用户可能具有相同的名称,但他们的电子邮件地址必须是独特。
Answers:
firstOrCreate()
检查finds
匹配之前是否存在所有参数。如果并非所有参数都匹配,则将创建模型的新实例。
如果只想检查特定的字段,则firstOrCreate(['field_name' => 'value'])
仅使用数组中的一项。这将返回第一个匹配项,如果找不到匹配项,则创建一个新项。
firstOrCreate()
和之间的区别firstOrNew()
:
firstOrCreate()
如果找不到匹配项,它将在数据库中自动创建一个新条目。否则,它将为您提供匹配的商品。firstOrNew()
如果找到不匹配的对象,它将为您提供一个新的模型实例,但只有在您明确地这样做时(调用save()
模型),它才会保存到数据库中。否则,它将为您提供匹配的商品。在一个或另一个之间进行选择取决于您要做什么。如果要在首次保存之前修改模型实例(例如,设置aname
或某些必填字段),则应使用firstOrNew()
。如果您可以仅使用参数立即在数据库中创建新的模型实例而无需对其进行修改,则可以使用firstOrCreate()
。
$user = User::firstOrCreate(array('email' => Input::get('email'), 'name' => Input::get('name')))
。
先前的答案已过时。由于Laravel 5.3firstOrCreate
现在具有第二个参数values
,因此可以一步实现,它用于新记录,但不用于搜索
$user = User::firstOrCreate([
'email' => 'dummy@domain.com'
], [
'firstName' => 'Taylor',
'lastName' => 'Otwell'
]);
protected $fillable
相应的模型上,因为它使用了批量分配。
updated_at
,,created_at
)VALUES ...
firstOrCreate()在找到匹配项之前检查所有参数是否存在。
如果只想检查特定字段,则使用firstOrCreate(['field_name'=>'value'])
$user = User::firstOrCreate([
'email' => 'abcd@gmail.com'
], [
'firstName' => 'abcd',
'lastName' => 'efgh',
'veristyName'=>'xyz',
]);
然后它只检查电子邮件