如何使用Yii2中的RESTful模型和控制器过滤记录

时间:2015-05-06 04:18:11

标签: php rest yii yii2

我正在使用Yii2创建RESTful API,并已按照快速入门教程*成功设置了名为Contacts的模型。我喜欢如何在不创建任何操作的情况下创建,列出,更新和删除记录。

但是,我无法看到如何过滤结果。我想只返回contact.user_id等于1的联系人(例如),因为它当前将回复所有记录。如果没有创建动作,这可能吗?

我也不确定如何限制结果。从我读过的内容来看,我觉得它应该附加带有?limit = 5的URI。

2 个答案:

答案 0 :(得分:4)

您应该返回一个数据提供者而不是一组对象,这些对象支持您的分页。 也许这种方法会更有用:

public function actionIndex() 
{
   return new \yii\data\ActiveDataProvider([
        'query' => Contact::find()->where(['user_id' => \Yii::$app->user-id]),
   ]);
}

您还可以保持索引操作不变,但是使用prepareDataProvider - 回调提供预设操作:

public function actions()
{
    $actions = parent::actions();
    $actions['index']['prepareDataProvider'] = function($action) 
    {
        return new \yii\data\ActiveDataProvider([
           'query' => Contact::find()->where(['user_id' => \Yii::$app->user-id]),
        ]);
    };

    return $actions;
}

希望有所帮助。

答案 1 :(得分:1)

我不得不重写索引方法,尽管不想这样做。我的解决方案如下:

public function actions()
{
    $actions = parent::actions();
    unset($actions['index']);

    return $actions;
}

public function actionIndex()
{
    return Contact::findAll(['user_id' => \Yii::$app()->user-id]);
}

我想这个解决方案意味着我需要编写自己的分页代码,但这是我希望避免的其他内容。