2017-06-05 2 views
0

Ich habe einen eher irren Fehler beim Versuch, Daten zu meiner Datenbank hinzuzufügen. Es sagt mir, dass es eine Verletzung Integrität ist, das heißtYii2 - Integritätseinschränkungsverletzung - yii db IntegrityException

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`ticketing_system`.`parcels`, CONSTRAINT `FK_parcels_customers_customer_id` FOREIGN KEY (`sender_id`) REFERENCES `customers` (`customer_id`)) 
The SQL being executed was: INSERT INTO `parcels` (`parcel_id`) VALUES (DEFAULT) 

Ich habe die Werte werden überprüft eingefügt und alle von ihnen sind aus der referenzierten Tabelle aufgenommen. Lustiges Bit ist, dass, wenn ich die Werte widerspreche und sie verwende, um die Datenbank direkt über SQL-Abfrage auf dem PHPMyAdmin zu aktualisieren, die Datenbank ohne irgendein Problem gut bevölkert wird. Wenn ich versuche, die Reihenfolge der Fremdschlüssel so zu ändern, wie sie bei der SQL-Abfrage erscheinen, schlägt die erste fehl, was bedeutet, dass alle Fremdschlüssel des Modells fehlerhaft sind.

EDITED

Hier ist meine actionCreate in den ParcelsController

public function actionCreate() 
{ 
    $model = new Parcels(); 
    $customerModel = new Customers(); 

    //checking whether we are getting the logged in user id value 
    Yii::info("User id=".Yii::$app->user->id); 

    $model->received_by_id = Yii::$app->user->id; 

    if (Yii::$app->request->post()) { 

     $data = Yii::$app->request->post('Customers'); 

     $sender_id = Customers::create([ 
      'name' => $data['name'], 
      'mobile_number' => $data['mobile_number'], 
      'sex' => $data['sex'], 
      'address' => $data['address'], 
      'registered_by_id' => $model->received_by_id, 
     ]); 

     $data = Yii::$app->request->post('Parcels'); 

     $receiver_id = Customers::create([ 
      'name' => $data['name'], 
      'mobile_number' => $data['mobile_number'], 
      'sex' => $data['sex'], 
      'address' => $data['address'], 
      'registered_by_id' => $model->received_by_id, 
     ]); 

     $model->consignment_number = $model->generateUniqueRandomString("consignment_number"); 
     $model->source_id = $model->receivedBy->station_id; 

     $model->parcel_id = Parcels::create([ 
      'consignment_number' => $model->consignment_number, 
      'sender_id' => $sender_id, 
      'receiver_id' => $receiver_id, 
      'source_id' => $model->source_id, 
      'destination_id' => $data['destination_id'], 
      'type_id' => $data['type_id'], 
      'weight' => $data['weight'], 
      'cost' => $data['cost'], 
      'parcel_info' => $data['parcel_info'], 
      'received_by_id' => $model->received_by_id, 
     ]); 

     // return $this->redirect(['view', 'id' => $model->parcel_id]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 'customerModel' => $customerModel, 
     ]); 
    } 
} 

Kunden :: erstellen Funktion in den Kunden Modell

public static function create($data) 
{ 

    $model = new self; 

    $mobile_number = $data['mobile_number']; 

    $exists = $model->find()->where([ 'mobile_number' => $mobile_number ])->exists(); 

    if($exists) { 
     $existing_customer = Customers::find() 
      ->where('mobile_number = :mobile_number', [':mobile_number' => $mobile_number]) 
      ->one(); 
     return $existing_customer['customer_id']; 
    } 
    else { 
     $model->name = $data['name']; 
     $model->registered_by_id = $data['registered_by_id']; 
     $model->mobile_number = $data['mobile_number']; 
     $model->sex = $data['sex']; 
     $model->address = $data['address']; 
     $model->status = 10; 
     $model->save(); 
     return $model->getPrimaryKey(); 
    } 

} 

Parcels :: create Funktion im Parcels Modell

Und hier ist die Funktion generateUniqueRandomString() in der Parcels Modell

public function generateUniqueRandomString($attribute, $length = 10) { 

    $randomString = Yii::$app->getSecurity()->generateRandomString($length); 

    $randomString = strtoupper($randomString); 

    if(!$this->findOne([$attribute => $randomString])) 
     return $randomString; 
    else 
     return $this->generateUniqueRandomString($attribute, $length); 

} 

Antwort

0

Sorry für euch stört. Ich konnte das Problem bekommen, wo ich falsch lag. In der create() Funktion des Parcels Modell, habe ich nur neue Variablen und scheiterte sie an das Modell zu binden, dh

$consignment_number = $data['consignment_number']; 
$receiver_id = $data['receiver_id']; 
$sender_id = $data['sender_id']; 
$source_id = $data['source_id']; 
$destination_id = $data['destination_id']; 
$type_id = $data['type_id']; 
$weight = $data['weight']; 
$cost = $data['cost']; 
$parcel_info = $data['parcel_info']; 
$received_by_id = $data['received_by_id']; 

gewesen wäre:

$model->consignment_number = $data['consignment_number']; 
$model->weight = $data['weight']; 
$model->cost = $data['cost']; 
$model->parcel_info = $data['parcel_info']; 
$model->received_by_id = $data['received_by_id']; 
$model->status = $data['status']; 
$model->receiver_id = $data['receiver_id']; 
$model->sender_id = $data['sender_id']; 
$model->source_id = $data['source_id']; 
$model->destination_id = $data['destination_id']; 
$model->type_id = $data['type_id']; 

Leider Ihre Zeit nehmen, weil meiner Nachlässigkeit.

Verwandte Themen