【发布时间】:2022-01-14 20:09:54
【问题描述】:
我上次可能写过同样的问题,我回来了..
Laravel Eloquent firstOrCreate doesn't work properly
关于最后一个问题,我发现fillable 属性过滤器更新了字段清单。所以,如果你想根据fieldA 和fieldB 更新一个表,那么你的代码可能是..
$modelOrRelation->updateOrCreate(
['fieldA' => 'a', 'fieldB' => 'b'], ['otherfields' => 'update value']
);
并且您必须在 fillable 属性上指定这些字段。 $fillable = ['fieldA', 'fieldB', ...]
这就是我对firstOrCreate 和updateOrCreate 的了解。
此时,以下代码生成许多相同的行。看起来,第一个参数['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