【问题标题】:Laravel Eloquent updateOrCreate doesn't work properlyLaravel Eloquent updateOrCreate 无法正常工作
【发布时间】:2022-01-14 20:09:54
【问题描述】:

我上次可能写过同样的问题,我回来了..

Laravel Eloquent firstOrCreate doesn't work properly

关于最后一个问题,我发现fillable 属性过滤器更新了字段清单。所以,如果你想根据fieldAfieldB 更新一个表,那么你的代码可能是..

$modelOrRelation->updateOrCreate(
    ['fieldA' => 'a', 'fieldB' => 'b'], ['otherfields' => 'update value']
);

并且您必须在 fillable 属性上指定这些字段。 $fillable = ['fieldA', 'fieldB', ...]

这就是我对firstOrCreateupdateOrCreate 的了解。

此时,以下代码生成许多相同的行。看起来,第一个参数['candle_date_time_kst']什么都不做..

// candleRelation is hasMany relation..
$candleRelation = $market->candles($period);

$created = $created->add($candleRelation->updateOrCreate(
    [
        'candle_date_time_kst' => $time,
    ],
    $item
));

这会创建许多相同的 candle_date_time_kst 值行。此时,fillable 属性已经填充了目标字段。

我还想念什么?

updateOrCreate 不应该信任吗?我不这么认为..我想念一些东西...有什么见解吗?


#220114 更新

所以,我做我的功课..

使用DB::getQueryLog(),我得到了这个查询..

看起来,updateOrCreate() 记得上次更新值。然后,如果我为另一个updateOrCreate() 重用相同的雄辩关系对象,方法再次使用最后一个更新参数。它使and 子句,所以返回记录是无..

所以,我使用newQuery() 方法来初始化查询绑定。

$created->add($candleRelation->newQuery()->updateOrCreate(
    [
        'candle_date_time_kst' => $time
    ],
    $item
));

#220114

不幸的是,重新测试显示 newQuery() 实际上没有帮助..

我尝试了$relation->newModelInstance() 并获得了相同的绑定。

我试图做的是在没有其他任何东西的情况下获得相同的父绑定。 ..有人知道吗?


基于绑定,当我得到关系模型时,我也可以得到干净的绑定。所以我就在下面做..

$created->add($market->candles($period)->updateOrCreate(
    [
        'candle_date_time_kst' => $item['candle_date_time_kst']
    ],
    $item
));

仅将$candleRelation 更改为$market->candles($period)

每次尝试都会产生新的关系实例,因此绑定问题甚至不存在。

....我疯了。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您需要提供格式为的数组 [ 列 => 值,... ] 不是 [ 值 ]

    【讨论】:

    • 哦我的错..我编辑我的问题..
    【解决方案2】:

    前段时间我也遇到过类似的问题。 UpdateOrInsert 方法解决了它。 不幸的是,这个方法是 Query Builder,没有说服力。但要达到这个结果,这对我来说是唯一真正可行的解决方案。

    仅当我尝试在 where 子句中使用超过 1 列时才会出现问题,就像在您的示例中一样。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2018-01-17
      相关资源
      最近更新 更多