由于我对Laravel的关系还很陌生,我目前正在苦苦挣扎。 我有一个模型产品,该模型产品由一种模型材料制成。 该材料可用于多种产品。
我有一个名为product_material的表来链接它们。
到目前为止我所拥有的 在产品中
private static <V, E, M extends Map<String, ? extends Iterable<V>>> void RunMap(
final M results,
final Asyncc.IAsyncCallback<M, E> f) {
在材料中
public function material()
{
return $this->hasOne(Material::class, '');
}
但这给我一个错误,说我的物料表中没有任何product_id。
但是:我的材料不应该具有product_id,因为它在创建时没有任何链接,可以在多种产品中使用
编辑:数据库结构
public function products(){
return $this->hasMany(Product::class, 'product_material');
}
答案 0 :(得分:2)
您使用了错误的关系和错误的模式
如果1种产品具有多种材料,则应为( 1对多)
现在一种材料也有很多产品,所以关系应该是
简而言之,一种产品具有多种材料,而一种材料具有 几种产品,所以最后的关系应该是:
多对多,并使用BELONG对多
答案 1 :(得分:1)
如果您确定某个产品只会拥有一种材料,那么这将是一个属于/具有多种关系的产品。一个产品可以有一个材料,但是材料可以有很多产品。
因此,您不需要数据透视表;您的products
表将有一个material_id
,这是materials
表的外键。
class Material extends Model
{
public function product()
{
return $this->hasMany(Product::class);
}
}
class Product extends Model
{
public function material()
{
return $this->belongsTo(Material::class);
}
}
答案 2 :(得分:1)
尝试这个
const reduce = data[0].x;
series: [{
data: data.map(elem => {
elem.x = elem.x - reduce;
return elem;
})
}]
答案 3 :(得分:0)
您在此处指定了空字符串。
public function material()
{
return $this->hasOne(Material::class);
}
如果您不想指定任何键,例如product_id
,则可以将该键指定为指向某些ID索引表的额外参数。
像这样
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
Laravel Eloquent Relationships
希望这会有所帮助:)
答案 4 :(得分:0)
模型Product.php
public function materials()
{
return $this->belongsToMany(Material::class, 'product_material');
}
您可以直接从materials
表中获取product
模型ProductMaterial.php
public function material()
{
return $this->belongsTo(Material::class, 'material_id');
}
public function product()
{
return $this->belongsTo(Product::class, 'product_id');
}