我问这个问题是为了找到最佳实践。
DB::table('owners')
->where('property_id',$id)
->update(array('person_id'=>$owner));
问题在于表中owners
可能没有要更新的行。在那种情况下,我需要INSERT INTO
代替UPDATE
。
我的问题是我每次必须运行2个查询,一个用于检查行是否已存在,另一个用于update
或insert into
。每次运行两个查询是否正确?有没有更好的方法来实现这一目标?我需要为用户保持快速的查询过程。
更新:该表owners
是多对多关系的中间表。不幸的是我不能使用ON DUPLICATE KEY
。
很好,您可以尝试使用firstOrCreate
Laravel方法来检查用户是否存在。之后,检索用户对象并将其传递给更新函数,否则,如果找不到该用户,该firstOrCreate
方法将为您服务,因为它将使用您提供的数据创建一个新用户,并将自动增加最后一个用户+ 1 id。
还有一个选项可以使用firstOrNew
,它会根据您传递的数组值检查实例是否存在,如果找不到匹配项,它将自动创建您要处理的模型的新实例以进行进一步操作。
这是例子 firstOrNew
public function getFirstUserOrNew($email)
{
$user = User::firstOrNew(['email' => $email]);
if($user)
{
$this->UpdateUser($user);
}
else
{
$this->CreateUser($user);
}
}
public function UpdateUser(User $user)
{
//Do update stuff
}
public function CreateUser(User $user)
{
//Do create stuff
}
PS-我来自希腊,如果您想使用母语讨论任何问题,请给我PM :)
编辑:感谢@Pyton的贡献看来您也可以使用这里updateOrCreate
介绍的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句