Php 关系模型返回为json的Laravel联接表
我有三张桌子:Php 关系模型返回为json的Laravel联接表,php,laravel,eloquent,eloquent-relationship,Php,Laravel,Eloquent,Eloquent Relationship,我有三张桌子: 产品表(id,名称) 成分表(id,成分名称) 产品成分表(产品id,成分id) 我在产品中定义了一个关系 public function ingredients(){ return $this->hasMany('App\ProductIngredient','product_id','id'); } 当我使用 $products = Product::where('category_id',$cat->id)->with('ingredient
表(产品
,id
)名称
成分表(
,id
)成分名称
产品成分表(
,产品id
)成分id
public function ingredients(){
return $this->hasMany('App\ProductIngredient','product_id','id');
}
当我使用
$products = Product::where('category_id',$cat->id)->with('ingredients')->get();
我得到这个输出
"products": [{
"id": 1,
"name": "Hesp",
"category_id": 1,
"ingredients": [{
"id": 41,
"product_id": 1,
"ingredient_id": 4,
},
{
"id": 42,
"product_id": 1,
"ingredient_id": 5,
}]
}]
这是正确的
我想在配料表中添加配料名称,如下所示
"products": [{
"id": 1,
"name": "Hesp",
"category_id": 1,
"ingredients": [{
"id": 41,
"product_id": 1,
"ingredient_id": 4,
"ingredient_name": "some name" // I want to add this field
},
{
"id": 42,
"product_id": 1,
"ingredient_id": 5,
"ingredient_name": "some name" // I want to add this field
}]
}]
我想将其作为JSON返回,以便在API中使用,而不是在blade中使用,在blade中我可以调用其他关系
我怎样才能做到这一点 您实现的多对多关系完全错误。Per: 多对多关系是通过编写一个返回belongToMany方法结果的方法来定义的 要定义多对多关系的逆关系,请在相关模型上再次调用belongtomany
类产品扩展模型
{
公共功能成分()
{
返回$this->belongtomany('App\component','products\u components');
}
}
类成分扩展模型
{
公共功能产品()
{
返回$this->belongtomany('App\Product','products\u配料');
}
}
请注意,相关模型是belongtomany()
的第一个参数。不需要为简单的透视表创建模型。由于将透视表命名错误,因此必须将其指定为belongToMany()
的第二个参数。默认名称是按字母顺序排列的单数型号,即成分\产品
您的输出现在应该是这样的,包括
配料表中的值,而不是透视表中的值
"products": [{
"id": 1,
"name": "Hesp",
"category_id": 1,
"ingredients": [{
"id": 4,
"ingredient_name": "some name"
},
{
"id": 5,
"ingredient_name": "some name"
}]
}]
我看不到您的配料表中有配料名称字段。表二:配料字段:id,配料名称我已经添加了ingerdient名称。现在的查询是什么?包括您的配料->产品关系well@miken已经有关系了。如何获得所需的输出。