上次我可能也写过同样的问题然后我回来了..。
关于最后一个问题,我发现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()
重用相同的关系对象,则方法再次使用最后一个update参数。它是and
子句,所以返回记录为none。
因此,我使用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)
。
每次尝试时,新的关系实例都会产生这样的绑定问题。
……气疯了我了。
发布于 2022-01-13 09:43:41
您需要在格式列=>值中提供一个数组,非价值
发布于 2022-01-13 11:15:45
不久前我也有过类似的问题。UpdateOrInsert方法解决了这一问题。不幸的是,这种方法是查询生成器,而不是雄辩。但要达到这一结果,这是我唯一真正有效的解决办法。
只有当我尝试在where子句上使用超过1列时,才会出现问题,就像在您的示例中一样。
https://stackoverflow.com/questions/70693412
复制相似问题