Active Record模型中的Yii 2字段功能

时间:2019-01-31 12:07:45

标签: php rest yii yii2 yii2-advanced-app

我正在使用Yii2下的REST API,但是我对每一次不同的操作该模型应该返回什么有一个疑问。

例如,在列出动作时,我需要例如返回4个属性,而对于细节动作,我需要从同一模型返回10个属性。

Yii2中实现此目标的最佳或标准方法是什么。

示例:

/文章

返回[id,标题,图像,日期]

/ articles / 7

返回[id,标题,图像,日期,作者,喜欢,最新评论]

谢谢

2 个答案:

答案 0 :(得分:0)

只需在模型中编写方法。

class MyModel extends ActiveRecord
{
    private static $fieldset_1 = [
       'id', 'title', 'image', 'date'
    ];

    private static $fieldset_2 = [
       'id', 'title', 'image', 'date', 'author', 'likes', 'last_review'
    ];

    public static function get(int $id)
    {
        if($id > 0) {
           return static::find()
              ->select(self::$fieldset_1)
              ->where(['id' => $id])
              ->asArray()
              ->one();
        }
   }

   public static function getList()
   {
      return static::find()
           ->select(self::$fieldset_2)
           ->asArray()
           ->all();
   }

}

在控制器中

class MyController extends Controller{

    public function actionListing(){
        return $this->asJson(MyModel::getList());
    }

    public function actionDetails($id){
        return $this->asJson(MyModel::get((int)$id));
    }

}

答案 1 :(得分:0)

适用于/ article / 7:

public function actionView($id)
{
   return User::findOne($id);
} 

public function actionView($id)
{
   return User::find()->select([id, title, image, date, author, likes,last_review])->one();
}

/文章:

public function actionIndex()
{
   return User::find()->select([id, title, image, date])->all();
}