如何在if语句中使用laravel db query-> update()方法

时间:2019-08-12 16:57:45

标签: laravel

我要检查是否存在某些内容,如果该条件为真,我想更新之前获取的记录。

$resultQuery = DB::table('cards')->where('api_id', $card->id)->first();

if (this condition will pass I want to update this record) {
    $resultQuery->update(array('price_usd' => $card->prices->usd));
}

当我像这样使用-> update()时,出现错误:

  

调用未定义的方法stdClass :: update();

我该怎么做?

3 个答案:

答案 0 :(得分:2)

laravel查询构建器上的first()函数返回stdClass,表示标准类

在PHP中,update()中没有名为stdClass的函数。您在stdClass上调用了update(),这会导致错误。

有几种方法可以实现您的目标。

  1. 使用Laravel查询构建器update()函数。
$resultQuery = DB::table('cards')->where('api_id', $card->id)->first();

if (your_condition) {
    Db::table('cards')
        ->where('api_id', $card->id)
        ->update([
            'price_usd' => $card->prices->usd
        ]);
}
  1. 如果您不想获取卡数据,请不要致电first()
$resultQuery = DB::table('cards')->where('api_id', $card->id);

if (your_condition) {
    $resultQuery
        ->update([
             'price_usd' => $card->prices->usd
        ]);
}
  1. 使用雄辩的模型(Laravel的首选方式)

为卡片创建雄辩的模型(如果尚未完成的话)。

public class Card extends Model
{

}

使用雄辩的查询生成器来获取数据。并使用模型update()函数更新数据。

$resultingCard = Card::where('api_id', $card->id)->first();

if (your_condition) {
    $resultingCard->update([
        'price_usd' => $card->prices->usd,
    ]);
}

答案 1 :(得分:0)

类似这样的东西:

$resultQuery = DB::table('cards')->where('api_id', $card->id);

if ($resultQuery->count()) {

  $object = $resultQuery->first();
  $object->price_usd = $card->prices->usd;
  $object->save();
}

或在此处寻找替代解决方案:Eloquent ->first() if ->exists()

答案 2 :(得分:0)

如果您使用的是模型

您可以添加卡控制器

$card = Card::where('api_id', $card->id)->first();

if (someConditional) 
{
  // Use card properties, number is a example.
  $card->number = 10
  // This line update this card.
  $card->save();
}

您可以了解有关eloquent here的更多信息。