При попытке присоединить товары к заказу я получаю следующую ошибку MYSQL:
SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'order_id' не может быть пустым (SQL: вставкав order_product
(amount
, history_price
, order_id
, product_id
) значения (1, 5.35,,))
Я уже искал решение, однако всеРешения, которые мне удалось найти, похоже, говорили о том, чтобы не использовать идентификаторы laravel по умолчанию в качестве первичных ключей, в то время как я использую идентификаторы по умолчанию.
Вот три миграции:
Schema::create('orders', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('status_id')->unsigned();
$table->boolean('visible')->default(true);
$table->string('postal_code');
//$table->string('country');
$table->string('municipality');
$table->string('street');
$table->string('house_number');
$table->timestamps();
});
Schema::table('orders', function($table) {
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('status_id')
->references('id')
->on('statuses')
->onDelete('cascade');
});
Schema::create('products', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 100);
$table->float('price');
$table->integer('stock');
$table->string('short_description', 240);
$table->string('long_description', 1000);
$table->boolean('visible')->default(true);
$table->string('image_url',240);
$table->timestamps();
});
Schema::create('order_product', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->integer('order_id')->unsigned();
$table->integer('product_id')->unsigned();
$table->float('history_price');
$table->integer('amount');
$table->timestamps();
});
Schema::table('order_product', function($table) {
$table->foreign('order_id')
->references('id')
->on('orders')
->onDelete('cascade');
$table->foreign('product_id')
->references('id')
->on('products')
->onDelete('cascade');
$table->primary(array('order_id', 'product_id'));
});
Это код, из которого происходит ошибка:
foreach($user->products()->get(['price','amount']) as $product){
$order->products()->attach($product, array('history_price'=> $product->price, 'amount'=>$product->amount,'order_id'=>$order->id, 'product_id'=>$product->id));
}
$order->save();
При необходимости я мог бы предоставить методы модели, которые определяют отношения между ними, однакотак как эти таблицы следуют стандартным соглашениям в отношении Laravel, я не считаю это необходимым.