Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关系模型返回为json的Laravel联接表_Php_Laravel_Eloquent_Eloquent Relationship - Fatal编程技术网

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已经有关系了。如何获得所需的输出。