Добавления данных связаных таблиц
Как сформировать добавления заказа в БД при такой структуре используя PHP. Создания нового заказа (добавления в orders
) делаю INSERT INTO
orders(dt, pm) VALUES ($dt, $pm)
, а вот как зполнять связанную таблицу, не могу понять.
CREATE TABLE `products` (
`id_product` INT(11) NOT NULL AUTO_INCREMENT,
`material` VARCHAR(40) NOT NULL,
`code` VARCHAR(45) NOT NULL,
`price` DECIMAL(10,0) NOT NULL,
PRIMARY KEY (`id_product`)
);
CREATE TABLE `orders` (
`id_order` INT(11) NOT NULL AUTO_INCREMENT,
`dt` DATETIME NOT NULL,
`status` VARCHAR(45) NULL DEFAULT NULL,
`pm` VARCHAR(9) NULL DEFAULT '-',
PRIMARY KEY (`id_order`)
)
CREATE TABLE `orders_products` (
`id_order` INT(11) NOT NULL,
`id_product` INT(11) NOT NULL,
`quantity` INT(11) NOT NULL,
`price` DECIMAL(10,0) NOT NULL,
PRIMARY KEY (`id_order`, `id_product`),
INDEX `id_product` (`id_product`),
CONSTRAINT `id_order` FOREIGN KEY (`id_order`) REFERENCES `orders` (`id_order`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `id_product` FOREIGN KEY (`id_product`) REFERENCES `products` (`id_product`)
)
UPD Вроде бы сделал, все добавляет
public function newOrder($id_product, $data)
{
try {
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dt = date("Y-m-d H:i:s");
$this->db->beginTransaction();
$this->db->exec("INSERT INTO `orders` (dt, pm) VALUES ('$dt', '{$data['pm']}')");
$last_id = $this->db->lastInsertId();
$this->db->exec("INSERT INTO `orders_products` (id_order, id_product, quantity, price, equipment)
VALUES ($last_id, $id_product, {$data['quantity']}, {$data['price']}, {$data['id_equipment']})");
$this->db->commit();
} catch (Exception $e) {
$this->db->rollBack();
echo "Ошибка: " . $e->getMessage();
}
}
А если нужно к примеру добавить товар в БД, и одновременно добавить в заказ его.То есть товар может быть в БД, и нет. Сделать еще транзакцию для данного случая ?
Источник: Stack Overflow на русском