laravel - Laravel 与枢轴同步多对多关系
问题描述
背景资料:
我正在 Laravel 中创建一个资产跟踪系统。
- 我有一个具有许多属性的产品。
- 这些属性的值不属于产品;它属于它的股票。
问题:
如何更新属性的值?我认为我的关系是正确的,因为我去了数据库并单独创建了每条记录并且它有效(如上图所示)。但我不知道如何构建代码以通过浏览器创建它们。
我的代码:
这是我的产品型号:
// Product.php
class Product extends Model {
public function stocks()
{
return $this->hasMany(Stock::class)->orderBy('barcode', 'asc');
}
public function attributes()
{
return $this->hasMany(Attribute::class);
}
}
这是我的属性模型:
// Attribute.php
class Attribute extends Model {
public function getValueByBarcode($stock)
{
return $this->values()->whereBarcode($stock)->first()->value ?? '';
}
public function product()
{
return $this->belongsTo(Product::class);
}
public function stocks()
{
return $this->belongsToMany(Stock::class);
}
public function values()
{
return $this->belongsToMany(Stock::class)->select('value');
}
这是我的库存模型:
// Stock.php
class Stock extends Model {
public function product()
{
return $this->belongsTo(Product::class);
}
public function attributes()
{
return $this->belongsToMany(Attribute::class)->withPivot('value');
}
解决方案
如果您必须从产品同步,那么关系应该属于许多带有数据透视表的关系。像这样...
// Product.php
class Product extends Model {
public function **attributeStock**()
{
return $this->belongsToMany(Attribute::class, 'attribute_stock', 'product_id', 'stock_id')->withPivot('value');
}
}
然后访问其他属性尝试其中一种方法。
$product->attributeStock()->attach($attributeId, ['value' => $value]);
$product->attributeStock()->sync([$attributeId => ['value' => $value]]);
Product::find(1)->attributeStock()->save($attributeId, ['value' => $value]);
如果您仍然面临处理该方法的任何困难,请告诉我。
推荐阅读
- python - 如何将使用连字符的对象数据类型列转换为日期时间?
- javascript - 嵌套路由和 Switch - 如何传递 props.match.params.id?
- xml - 使用 XML 转换更改我的 web.config 中的服务端点地址
- tizen - 通过 artik cloud 获取 gear s3 数据
- json - 如何创建招摇阵列
- python - 如何清除scrapy工作列表?
- c++ - C ++是否可以拥有动态默认数据成员
- python - 初始化 spark 上下文后,在运行时更改 pyspark 的 hadoop 配置中的 aws 凭据
- python - 熊猫系列给出的总和不正确
- r - 闪亮的服务器和NGNX一样吗?