我的产品模型与属性和attributes_values具有多对多关系
当我更改属性值时:
foreach ($attribute_list as $key => $value) {
...
$attribute = ProductsAttributes::where('code', '=', $key)->first();
$attr_values = $attribute->values()->updateOrCreate(
['id' => $value_id],
$value
);
$old_product_attributes = $old_product_attributes->merge([$key => $value_id]);
...
}
我想检查是否有任何列已更新,但如果我
dd($attr_values->isDirty());
它返回false。但在更新期间更改了1列。
目前我检查更改的方式是使用同步:
$syncResult = $product->attr_values()->sync($old_product_attributes);
if (collect($syncResult)->flatten()->isNotEmpty()) {
$product->updated_at = now();
}
但在这里,如果我dd($syncResult),它返回空,因为没有进行任何更改。如果我检查products_atr_values表,有更改的列已更新为updated_at。
我做错了什么?
关系:
产品型号有:
public function attr_values()
{
return $this->belongsToMany('Modules\Products\Entities\ProductsAttributesValues', 'products_attributes_values_prod', 'product_id', 'value_id');
}
产品属性模型具有:
public function values()
{
return $this->hasMany('Modules\Products\Entities\ProductsAttributesValues', 'attribute_id');
}
产品属性值模型具有:
public function attributes()
{
return $this->belongsTo('Modules\Products\Entities\ProductsAttributes');
}
public function products()
{
return $this->belongsToMany('Modules\Products\Entities\Products', 'products_attributes_values_prod', 'value_id', 'product_id');
}
public function attr_val_prod()
{
return $this->belongsToMany('Modules\Products\Entities\ProductsAttributesValuesProd', 'value_id');
}
1条答案
按热度按时间rkkpypqq1#
isDirty()
无法运作,因为当模型属性变更时会使用,但尚未储存在数据库中。如果您只需要更改产品,则可以使用ProductsAttributesValues模型中的updated_at字段:
或者如果您需要更改更多内容,则可以在ProductsAttributesValues中再次使用保存的事件: