2017-06-05 153 views
0

我試圖將數據添加到我的數據庫時遇到了一個相當困難的錯誤。它不斷告訴我,有一個誠信違規行爲,即Yii2 - 完整性約束違規 - 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) 

我已經檢查被插入的價值和所有的人都在引用表採摘。有趣的是,當我回顯值並使用它們直接通過PHPMyAdmin上的SQL查詢更新數據庫時,數據庫填充良好,沒有任何問題。同樣,當我嘗試更改執行的SQL查詢中出現的外鍵順序時,第一個失敗,這意味着模型的所有外鍵都失敗。

EDITED

這是我在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, 
     ]); 
    } 
} 

客戶actionCreate ::在爲客戶創造功能型號

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(); 
    } 

} 

地塊::在地塊示範創建功能

public static function create($data) 
{ 
    $model = new self; 

    $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']; 

    $model->save(false); 
    return $model->getPrimaryKey(); 

    // echo var_dump($data); 
    // echo "Consignment Number: ".$consignment_number." - Sender: ".$sender_id." - Receiver: ".$receiver_id." - From: ".$source_id." - To: ".$destination_id." - Type: ".$type_id." - Weight: ".$weight." - Cost: ".$cost." - Parcel Info: ".$parcel_info." - Received By: ".$received_by_id; 
} 

這裏是在地塊型號

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); 

} 

回答

0

對不起功能generateUniqueRandomString()打擾你們。我能夠知道我出錯的地方。在包裹模型的建立()函數,我只是創造了新的變量,未能將它們綁定到模型,即

$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']; 

本來應該是:

$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']; 

對不起,把你的時間,因爲我的粗心大意。

相關問題