【问题标题】:Laravel Fluent query update or insert based on if row existsLaravel Fluent 查询更新或插入基于行是否存在
【发布时间】:2015-03-18 21:32:41
【问题描述】:

我有一个 Laravel Fluent 查询,如下所示:

$query = DB::connection('mysql_users')->table('users_info');
$exists = $query->where('email', '=', $user->email)-first();

if(is_object($exists)) {
    // update email
}
else {
    // insert email
}

问题是,有时 $exists 不是一个对象,即使该行确实存在。我也尝试过 is_null() 并且遇到了同样的问题。进行此检查的正确方法是什么?

【问题讨论】:

  • count($exists) != 0?
  • 如果它不是一个对象,那它是什么?试试dd($exists)
  • @TimLewis:我实际上也尝试过。当它为空(或任何它)时,它会产生一个错误。
  • @lukasgeiter:啊,熟悉的面孔。 :) dd 是什么?
  • 嗯。奇怪的。试试@lukasgeiter 所说的,在您知道存在而您知道不存在的电子邮件上执行dd($exists)。比较这些结果并从那里开始。此外,如果您使用->get() 后跟count(),这可能会有所不同。很难说。

标签: php mysql laravel fluent


【解决方案1】:

只需检查语句,如果它不是对象,则不要检查。

if($exists = $query->where('email', '=', $user->email)-first()) {
    // update email
}
else {
    // insert email
}

【讨论】:

  • 我可以看到一个问题;如果它确实存在并且他想要更新该行,他将不得不重复该查询。如果它在一个变量中,那么你不会。
  • 你去@Tim Lewis
  • 如何在不再次查询的情况下更新 $exists?记住 fluent 不允许 $exists->update(['foo'=>'bar'])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多