首页 > 解决方案 > 以嵌套的 Json 格式返回响应

问题描述

我正在尝试以嵌套 json 格式获取我的响应

[  
   {  
      "recipe_id":"33",
      "e_name":"crispy",
      "e_desc":"Crispy Gingersnaps",
      "calries":"500",
      "steps":[  
         {  
            "step_id":"22",
            "recipe_id":"33",
            "step_number":3,
            "instruction":'here is the instructions',            
         }
         {  
            "step_id":"23",
            "recipe_id":"34",
            "step_number":4,
            "instruction":'here is the instructions',            
         }
        {  
            "step_id":"23",
            "recipe_id":"35",
            "step_number":5,
            "instruction":'here is the instructions',            
         }
      ]
   }
]

这是我的代码

$query  = new \yii\db\Query();
            $recipes = $query->select(['recipe.recipe_id','recipe.image','recipe.'.$name,'recipe.'.$small_desc,'recipe.person_count',
            'recipe.calories','recipe.period','recipe.'.$desc,'recipe_step.instruction'])->from('recipe')
            ->where(['recipe.recipe_id' => $recipe_id])            
            ->innerJoin("recipe_step","recipe.recipe_id=recipe_step.recipe_id");

我得到了结果,但 json 格式不像我期望的那样

标签: jsonrestyii2

解决方案


我不知道是否有这样的选项可以仅通过查询来实现此行为。但是您可以实现与步骤关系的接收关系并使用 yii2 方法添加步骤。

配方模型

public function getStep()
{
  return $this->hasMany(Step::className(), ['recipe_id' => 'id']);
}

您希望它在哪里获得:

$model = Recipe::find()->where([Recipe::tableName() . '.id' => $recipe_id])->innerJoin('step')->asArray()->one();

结果,您获得了所描述的数据结构。


推荐阅读