mannaro
@mannaro
Умею профессионально гуглить

Как правильно организовать связи между таблицами в Yii?

Здравствуйте! Есть у меня 2 таблицы:

CREATE TABLE `orders` (
	`id` INT(255) NOT NULL AUTO_INCREMENT,
	`user_name` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
)

CREATE TABLE `goods` (
	`id` INT(255) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NOT NULL,
	`price` DECIMAL(10,2) NOT NULL,
	PRIMARY KEY (`id`)
)

А также 3 таблица, которая является связующей:
CREATE TABLE `orders_goods_assigment` (
	`id` INT(255) NOT NULL AUTO_INCREMENT,
	`order_id` INT(255) NOT NULL,
	`goods_id` INT(255) NOT NULL,
	PRIMARY KEY (`id`)
)

Я попытался реализовать связь между таблицами orders и goods так (в модели Order):
public function relations() {           
  return [                              
    'goods' => [                        
      self::MANY_MANY,                  
      'Goods',                          
      'orders_goods_assigment(order_id, goods_id)'
    ]                                   
  ];                                    
}

К сожалению, если у меня, например, несколько одинаковых товаров ссылается на один и тот же заказ, то Yii считает, что такой товар всего один.
INSERT INTO `orders_goods_assigment` (`order_id`, `goods_id`) VALUES (1, 2);
INSERT INTO `orders_goods_assigment` (`order_id`, `goods_id`) VALUES (1, 2);
INSERT INTO `orders_goods_assigment` (`order_id`, `goods_id`) VALUES (1, 2);

Если внести в таблицу эти 3 строки, то при загрузке поля goods в модели Order, Yii покажет нам массив с 1 записью (вместо 3 одинаковых).
$order = Order::model()->findByPk(1);
print_r($order->goods); # Array([0] => Goods)


Подскажите пожалуйста, в чем я ошибся?
  • Вопрос задан
  • 3248 просмотров
Решения вопроса 2
Eugene_H
@Eugene_H
я б количество добавил в orders_goods_assigment
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
обычно на таблицу связей между goods и orders поля goods_id и order_id являются составным ключем, что как бы намекает что повторений там быть не должно.

Подумайте как организовать данные так, что бы можно было указывать количество товаров одного именования в заказе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы