我正在使用Yii2创建RESTful API,并已按照快速入门教程*成功设置了名为Contacts的模型。我喜欢如何在不创建任何操作的情况下创建,列出,更新和删除记录。
但是,我无法看到如何过滤结果。我想只返回contact.user_id等于1的联系人(例如),因为它当前将回复所有记录。如果没有创建动作,这可能吗?
我也不确定如何限制结果。从我读过的内容来看,我觉得它应该附加带有?limit = 5的URI。
答案 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]);
}
我想这个解决方案意味着我需要编写自己的分页代码,但这是我希望避免的其他内容。