gpt4 book ai didi

php - Laravel 多个多对多

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:40:30 25 4
gpt4 key购买 nike

我正在使用多对多关系。我想为此属性设置两个值。

产品,

属性,

attribute_product => product_id,attribute_id,value

enter image description here

我知道这是错的,但我想告诉你我想要的

$product->attributes()->sync([
1 => [
'value' => 'sky'
],
1 => [
'value' => 'night'
],
]);

更新 2

Schema::create('attribute_product', function (Blueprint $table) {

$table->unsignedInteger('product_id');
$table->unsignedInteger('attribute_id');
$table->text('value')->nullable();
$table->integer('devalue_id')->nullable(); // value id

$table->primary(['product_id', 'attribute_id', 'devalue_id']);

});

更新 1

我需要设置天空,夜晚

product_id  attribute_id      value       devalue_id
1 1 sky 1
1 1 night 2
...

最佳答案

对于这样的事情,我可以看到 2 个选项:

1.

手动附加和分离所需的记录。这可能会导致您如何检索数据的问题,因为它会返回多个相同的属性,但是,您可以在集合上使用 groupBy 来解决这个问题(如果它是一个你)。

2.

您可以将 JSON 对象存储在数据透视表的值列中。这将允许您为同一属性设置多个值。为此,您可以创建一个扩展 Illuminate\Database\Eloquent\Relations\PivotAttributeProductPivot 类(或任何您想要的名称)并向其添加一个 casts 属性即:

class AttributeProductPivot extends \Illuminate\Database\Eloquent\Relations\Pivot
{
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'value' => 'collection', //or object or array
];

}

然后将您的 attributes() 关系更改为:

public function attributes()
{
return $this->belongsToMany(Attribute::class)
->using(AttributeProductPivot::class)
->withPivot('value');
}

using() 允许您设置与默认模型不同的数据透视模型。如果需要,不要忘记对反向关系执行相同的操作。

在附加/同步时,您需要自己将 value 属性转换为 json。

希望这对您有所帮助!

关于php - Laravel 多个多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com