2017-06-05 14 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(); 
    } 

} 

は、区画内の関数を作成する::区画モデルに関数を作成します

ここ

とは、関数generateUniqueRandomString(ある)の区画モデル

皆さんを悩ませて申し訳ありません
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

インチ私はどこが間違っているのかという問題を解決することができました。区画モデルの作成()関数の中で、私は新しい変数を作成し、モデルにそれらを結合しなかった、すなわち

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

ので、お時間を割いて申し訳ありません私の不注意の

関連する問題