2017-08-24 2 views
1

Ich versuche, mein Modell über PUT HTTP-Anfrage in Yii2 Framework zu aktualisieren. Alles funktioniert gut, wenn ich einen einzelnen Primärschlüssel in meinem Modell habe.Yii2 REST API Update (Put), wenn Composite Key

Probleme sind, wenn ich Composite-Primärschlüssel in Tabelle haben.

Wie wird aktualisiert?

I einreichen JSON:

{"date_execution":"2017-08-26","order_id":"59", "company_id":13,"your_price":100,"car_id":"8","note":"lorem ipsum"} 

meine zusammengesetzten Primärschlüssel enthalten: - order_id - company_id

ich folgende Anträge versucht:

  • PUT SERVER/Angebot/100 - wo 100 ist company_id

  • PUT SERVER/Angebot/2000 - wo 2000 ORDER_ID ist

diese 2-Anfragen Problem zurückkommen:

{"name":"Not Found","message":"Object not found: 13","code":0,"status":404,"type":"yii\\web\\NotFoundHttpException"} 

Ich habe auch versucht

  • PUT SERVER/Angebot/2000/100 - wobei 2000 order_id und 100 ist company_id

  • PUT SERVER/Angebot/100/200 0

denen 2 Return-Controller/Aktion nicht gefunden Ausnahme

Auch habe ich order_id und company_id zu JSON, aber nichts funktioniert.

Controller-Klasse:

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; 
    } 
} 
+1

würde ich glaube, Sie haben eine benutzerdefinierte Aktion zu erstellen, weil Update nur $ id Parameter nimmt: https://github.com/yiisoft/yii2/blob/master /framework/rest/UpdateAction.php –

Antwort

0

Sie müssen zunächst primaryKey() im Modell hinzufügen, den Standard primaryKey() der Klasse Active außer Kraft zu setzen. Diese Funktion muss Ihren zusammengesetzten Primärschlüssel zurückgeben. Was Sie das Modell tun müssen, damit

primaryKey() 
{ 
    return array('company_id', 'order_id'); 
}