我知道使用:
User::firstOrCreate(array('name' => $input['name'], 'email' => $input['email'], 'pword' => $input['pword']));
首先检查用户是否存在,如果不是创建它,但它如何检查?它是否检查提供的所有参数或是否有一种方法来指定特定的参数,例如,我可以检查电子邮件地址是否存在,而不是名称-因为两个用户可能具有相同的名称,但他们的电子邮件地址需要是唯一的。
firstOrCreate()
在finds
匹配之前检查是否存在所有参数。如果不是所有参数都匹配,则将创建模型的新实例。
如果你只想检查一个特定的字段,那么使用firstOrCreate(['field_name' => 'value'])
数组中只有一个项目。这将返回第一个匹配的项目,或者创建一个新的,如果没有找到匹配。
firstOrCreate()
和firstOrNew()
之间的区别:
如果没有找到匹配项,firstOrCreate()
将自动在数据库中创建一个新条目。否则,它将为您提供匹配项。
如果发现不匹配,firstOrNew()
将为您提供一个新的模型实例,但只有在您显式执行此操作(在模型上调用save()
)时才会将其保存到数据库中。否则,它将为您提供匹配的项目。
在一个或另一个之间进行选择取决于您想要做什么。如果您想在第一次保存之前修改模型实例 (例如设置name
或一些必填字段),您应该使用firstOrNew()
。如果您可以只使用参数立即在数据库中创建一个新的模型实例而不修改它,您可以使用firstOrCreate()
。
从 Laravel 5.3 开始,可以通过firstOrCreate
使用第二个可选的values
参数一步完成此操作,该参数仅在创建新记录时使用,而不是用于初始搜索。doentation中解释如下:
firstOrCreate
方法将尝试使用给定的列 / 值对查找数据库记录。如果在数据库中找不到模型,则将插入一条记录,其中包含将第一个数组参数与可选的第二个数组参数合并后产生的属性。
实例
$user = User::firstOrCreate([
'email' => 'dummy@domain.example'
], [
'firstName' => 'Taylor',
'lastName' => 'Otwell'
]);
如果找到,则返回指定电子邮件的User
,否则创建并返回一个包含email
、firstName
和lastName
组合数组的新用户。
此技术需要设置M Assignment,使用fillable
或guarded
属性来指定哪些字段可以传递到create
调用中。
对于这个例子,下面的工作(作为User
类的属性):
/**
* The attributes that are m ignable.
*
* @var array
*/
protected $fillable = ['email', 'firstName', 'lastName'];
firstOrCreate()
在找到匹配项之前检查是否存在所有参数。
如果你只想检查一个特定的字段,然后使用firstOrCreate(['field_name' => 'value'])
像:
$user = User::firstOrCreate([
'email' => 'abcd@gmail.com'
], [
'firstName' => 'abcd',
'lastName' => 'efgh',
'veristyName'=>'xyz',
]);
然后它只检查电子邮件。
更新:
从 Laravel 5.3 开始,在单个步骤中执行此操作是可能的;firstOrCreate
方法现在接受可选的第二个数组作为参数。
第一个数组参数是字段 / 值匹配的数组,第二个数组是在创建模型时使用的附加字段,如果通过匹配第一个数组中的字段 / 值没有找到匹配:
See the Laravel API doentation本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(73条)