如何在 Yii2 中使用 RESTful 模型和控制器过滤记录
How to filter records with RESTful models and controllers in Yii2
我正在使用 Yii2 创建一个 RESTful API,并且已经按照快速入门教程*成功设置了一个名为 Contacts 的模型。我喜欢如何在不创建任何操作的情况下创建、列出、更新和删除记录。
但是我看不到如何过滤结果。我只想 return 联系人,其中 contact.user_id 等于 1(例如),因为它目前将回复所有记录。如果不创建动作,这可能吗?
我也不确定如何限制结果。从我读过的内容来看,我觉得它应该在 URI 后附加 ?limit=5.
尽管我不想,但我不得不重写索引方法。我的解决方案如下所示:
public function actions()
{
$actions = parent::actions();
unset($actions['index']);
return $actions;
}
public function actionIndex()
{
return Contact::findAll(['user_id' => \Yii::$app()->user-id]);
}
我想这个解决方案意味着我需要编写自己的分页代码,但这是我希望避免的其他事情。
您应该 return 一个支持分页的数据提供程序而不是一组对象。
也许这种方法会更有用:
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;
}
希望对您有所帮助。
我正在使用 Yii2 创建一个 RESTful API,并且已经按照快速入门教程*成功设置了一个名为 Contacts 的模型。我喜欢如何在不创建任何操作的情况下创建、列出、更新和删除记录。
但是我看不到如何过滤结果。我只想 return 联系人,其中 contact.user_id 等于 1(例如),因为它目前将回复所有记录。如果不创建动作,这可能吗?
我也不确定如何限制结果。从我读过的内容来看,我觉得它应该在 URI 后附加 ?limit=5.
尽管我不想,但我不得不重写索引方法。我的解决方案如下所示:
public function actions()
{
$actions = parent::actions();
unset($actions['index']);
return $actions;
}
public function actionIndex()
{
return Contact::findAll(['user_id' => \Yii::$app()->user-id]);
}
我想这个解决方案意味着我需要编写自己的分页代码,但这是我希望避免的其他事情。
您应该 return 一个支持分页的数据提供程序而不是一组对象。 也许这种方法会更有用:
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;
}
希望对您有所帮助。