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