モデル/ preorderからのモデル/注文関係からのPK(Auto Inc)、私のCRUDアクション(actionCreateなど) orderからのid(PK)が常にnullであるため、attibutes preorder to tableを挿入します。どのように私はこれを修正するのですか?Yii2 ID(PK)付きの属性(FK)を挿入できません
ここに私のコントローラは
$cartPositions = Yii::$app->cart->getPositions();
if (!$cartPositions or $cartPositions === null) {
return $this->redirect(['index']);
}
$dataProvider = new ArrayDataProvider([
'allModels' => $cartPositions,
]);
$model = new Order();
$model_po = new Preorder();
$postData = Yii::$app->request->post();
if ($model->load($postData) && $model_po->load($postData)) {
//model->save(false);
$model->status = 5;
$model_po->id_order = $model->id;
$model->total_cost = Yii::$app->cart->getCost();
$model->date = date('Y-m-d H:i');
$model->data = Yii::$app->cart->getSerialized();
$model_po->name = $model->name;
$model_po->phone = $model->phone;
$model_po->remarks = $model->message;
$model_po->created_at = $model->date;
//$model_po->save();
if (Model::validateMultiple([$model, $model_po]) && $model->save(false) && $model_po->save()) {
Yii::$app->session->setFlash('success', 'Thank You');
Yii::$app->mailer->compose('order/html', [
'model' => $model,
//'model_po' => $model_po,
'dataProvider' => $dataProvider,
])
//->setFrom(Yii::$app->params['email']['from'])
// ->setTo(Yii::$app->params['email']['to'])
// ->setSubject('The site posted a new order')
// ->send();
->setFrom(Yii::$app->params['email']['from'])
->setTo(Yii::$app->params['email']['to'])
->setSubject('The site posted a new Preorder')
->send();
Yii::$app->cart->removeAll();
return $this->render('orderSuccess', [
'model' => $model,
//'model_po' => $model_po,
]);
}
} else
{return $this->render('create_po', [
'model' => $model,
'model_po' => $model_po,
'dataProvider' => $dataProvider,
]);}
}
モデル/オーダー
public function rules()
{
return [
[['status', 'total_cost', 'date', 'data', 'name', 'phone'], 'required'],
[['code_order'], 'autonumber', 'format'=>'orderNum', 'digit'=>4],
[['status', 'total_cost'], 'integer'],
[['date'], 'safe'],
[['data', 'message'], 'string'],
[['name', 'email', 'phone'], 'string', 'max' => 255]
];
}
モデル/予約購入
public function rules()
{
return [
[['id_order', 'address'], 'required'],
[['id_order'], 'integer'],
[['created_at', 'updated_at'], 'safe'],
[['address', 'remarks'], 'string', 'max' => 500],
[['id_order'], 'exist', 'skipOnError' => true, 'targetClass' => Order::className(), 'targetAttribute' => ['id_order' => 'id']],
];
}
エラー情報です:
整合性制約違反 - のYii \ DB \ IntegrityException SQLSTATE [23000]:
preorder
(address
、id_order
、name
、phone
、remarks
、created_at
。INSERT INTO:整合性制約違反:SQLをして実行されている 1048列 'id_orderは' nullにすることはできません)VALUES( ''、NULL、 '名前'、 '121324325'、 ''、 '2016年7月23日午後5時01')
エラー情報:アレイ ( [0] => 23000 [1] => 1048 [2] => 'id_order'列はNULLにできません
は、私は仕事ではない)getPrimaryKey()と最後のインサートIDを(しようとしたと私は結果が満たされた二つのテーブルで$ modelpo-> id_order = $モデル - > IDを削除しようとしましたが、0
ありがとうございます –