我试图通过Yii2框架中的PUT http请求更新我的模型。 当我的模型中有单个主键时,一切正常。
当我在表格中有复合主键时出现问题。
如何更新?
我提交JSON:
{"date_execution":"2017-08-26","order_id":"59", "company_id":13,"your_price":100,"car_id":"8","note":"lorem ipsum"}
我的复合主键包括: - order_id - company_id
我尝试了以下请求:
PUT SERVER / offer / 100 - 其中100是company_id
PUT SERVER / offer / 2000 - 其中2000是order_id
这两个请求正在返回问题:
{"name":"Not Found","message":"Object not found: 13","code":0,"status":404,"type":"yii\\web\\NotFoundHttpException"}
我也试过
PUT SERVER / offer / 2000/100 - 其中2000是order_id,100是company_id
PUT SERVER / offer / 100/2000
那些2返回控制器/动作未找到异常
我还将order_id和company_id添加到JSON, 但没有任何作用。
控制器类:
use yii\rest\ActiveController;
class OfferController extends ActiveController
{
// adjust the model class to match your model
public $modelClass = 'app\models\Offer';
public function behaviors(){
$behaviors = parent::behaviors();
// remove authentication filter
$auth = $behaviors['authenticator'];
unset($behaviors['authenticator']);
// add CORS filter
$behaviors['corsFilter'] = [
'class' => CustomCors::className()
];
// re-add authentication filter
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBearerAuth::className(),
],
];
// avoid authentication on CORS-pre-flight requests (HTTP OPTIONS method)
$behaviors['authenticator']['except'] = ['options'];
return $behaviors;
}
}
答案 0 :(得分:0)
首先需要在模型中添加primaryKey(),以覆盖ActiveRecord类的默认primaryKey()。此函数需要返回复合主键。 因此,您需要做的模型是
primaryKey()
{
return array('company_id', 'order_id');
}
答案 1 :(得分:0)
如果您使用PUT SERVER / offer / 2000,100
,它应该可以工作您可以打印模型的primaryKey()以了解键的顺序。
您可以在此处的文档中查看 https://www.yiiframework.com/doc/api/2.0/yii-rest-action
如果是复合主键,键值将用逗号分隔。
答案 2 :(得分:0)
yii \ rest \ UpdateAction使用ActiveRecord :: findModel()方法加载数据。那些phpdoc中有一个答案:
如果模型具有复合主键,则ID必须为以下字符串: 主键值用逗号分隔
所以正确的资源是(考虑到表结构中的第一个键字段是company_id)
url