雄辩加入2桌

时间:2015-08-24 13:43:28

标签: php laravel laravel-5 eloquent laravel-5.1

我正在构建一个输出json的api

所以我拥有2张桌子

Categories Table
    id
    name
    nameAR
    nameTR
Items table
    id
    category_id
    nameAR
    nameEN

我的json输出完全是这样的,因为android应用程序已经发布,这个API将替换静态json文件

{
"name" : *Category name*,
"nameAR" : *Category Arabic name*,
"nameTR" : *Category Turkish name*,
"items" : [

   {"nameAR": *Item Arabic name*,
   "nameEN": *Item English name*},

   {"nameAR": *Item2 Arabic name*,
   "nameEN": *Item2 English name*}

   ... etc
   ]
}

我知道我可以这样做:

$cat=Category::first();
$items=$cat->items;

获取单个变量中的每个表但我想要的是使用 Category :: all()获取所有类别,并将属于该类别的所有项目作为对象放入数组中在类别的对象中调用 items

*我确实已经配置了我的关系

Category : 
    public function items()
        {
          return $this->hasMany('Project\Item');
        }
Item: 
    public function category()
        {
          return $this->belongsTo('Project\Category');
        }

2 个答案:

答案 0 :(得分:1)

要使用属于您可能使用的类别的项目获取所有类别:

$categories = Category::with('items')->get();

当以Json的形式返回集合时,你会得到你想要的东西,但你会有一些额外的列(如果你想要你需要使用select来选择你真正需要的那些)

答案 1 :(得分:0)

使用地图功能

        $categories = Categorie::all();
        $categories->map(function ($cat){
            $cat->items=Item::where('category_id',$cat->id)->get();
        });