Получение названий из базы

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
zabachok
Сообщения: 519
Зарегистрирован: 2013.12.16, 14:38

Получение названий из базы

Сообщение zabachok » 2013.12.16, 14:50

Добрый день!
Я новичок в Yii и не очень хорошо все знаю, потому прошу подсказки здесь.
Делаю небольшой, мультиязычный интернет-магазин, соответственно есть категории товаров. Для этого я создал две таблицы:

Код: Выделить всё

CREATE TABLE `category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `sort_order` int(11) NOT NULL,
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
и

Код: Выделить всё

CREATE TABLE `category_description` (
  `category_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Здесь category_id не первичный ключ. В первой таблице я храню саму категорию, а во второй ее название в зависимости от языка.
Для них создал модели. В модели Category описал relations:

Код: Выделить всё

'CategoryDescription' => array(self::HAS_MANY, 'CategoryDescription', 'category_id') 
Попытка получить данные приводит к ошибкам:

Код: Выделить всё

$model = Category::model()->with(array('CategoryDescription'))->findByPk($id); 
Подскажите пожалуйста, как лучше получать такого рода данные. Может лучше описать универсальный метод, который можно будет использовать и для других моделей?

Заранее благодарю, за любую помощь.
2b||!2b Just read the instructions

Аватара пользователя
zabachok
Сообщения: 519
Зарегистрирован: 2013.12.16, 14:38

Re: Получение названий из базы

Сообщение zabachok » 2013.12.16, 16:29

PS. Сейчас добавил в модель Category принудительное указание первичного ключа и все заработало. По-моему это велосипед:

Код: Выделить всё

public function primaryKey()
{
    return 'language_id';
} 
2b||!2b Just read the instructions

yan
Сообщения: 941
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Получение названий из базы

Сообщение yan » 2013.12.16, 16:39

zabachok писал(а):PS. Сейчас добавил в модель Category принудительное указание первичного ключа и все заработало. По-моему это велосипед:

Код: Выделить всё

public function primaryKey()
{
    return 'language_id';
}
это не просто велосипед а даже порно какое-то... какой все таки PK в таблице? и ошибку нужно приводить, экстрасенсов тут точно нет - многие проверяли :)

Аватара пользователя
zabachok
Сообщения: 519
Зарегистрирован: 2013.12.16, 14:38

Re: Получение названий из базы

Сообщение zabachok » 2013.12.16, 16:56

В таблице нет ПК и быть не может. То есть его можно создать, но смысла в нем никакого не будет. Все выборки делаются по связке категория+язык.
Ошибка такая:
Invalid argument supplied for foreach()
/var/www/html/www.irfe.com/old/shop/framework/db/ar/C ... r.php(826)

Либо AR не работает с таблицами без ПК, либо есть какая то лазейка.
2b||!2b Just read the instructions

yan
Сообщения: 941
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Получение названий из базы

Сообщение yan » 2013.12.16, 18:04

zabachok писал(а):В таблице нет ПК и быть не может. То есть его можно создать, но смысла в нем никакого не будет. Все выборки делаются по связке категория+язык.
Ошибка такая:
Invalid argument supplied for foreach()
/var/www/html/www.irfe.com/old/shop/framework/db/ar/C ... r.php(826)

Либо AR не работает с таблицами без ПК, либо есть какая то лазейка.
а это что такое тогда?

Код: Выделить всё

PRIMARY KEY (`category_id`)
?
активрекорд да определяет PK по схеме таблицы - если PK в таблице не задан то надо вручную, но я только не пойму почему в схеме одно поле для ключа, а в коде другое

UPD. Видимо здесь очепатка
Сейчас добавил в модель Category

mass
Сообщения: 71
Зарегистрирован: 2011.11.09, 15:03
Откуда: Москва
Контактная информация:

Re: Получение названий из базы

Сообщение mass » 2013.12.16, 22:11

По мне уж лучше определить в АР составной ключ. Хоть какая-то уникальность)

Код: Выделить всё

public function primaryKey()
{
    return array('category_id','language_id');
}
 

Аватара пользователя
zabachok
Сообщения: 519
Зарегистрирован: 2013.12.16, 14:38

Re: Получение названий из базы

Сообщение zabachok » 2013.12.17, 08:03

yan писал(а):UPD. Видимо здесь очепатка
Да, прошу прощения, тяжелый день был. Конечно не Category, а CategoryDescription.

mass, такой вариант решает все проблемы! Неужели нет способа делать выборки из таблиц, а которых нет ПК?
2b||!2b Just read the instructions

ApJIeKuHo
Сообщения: 191
Зарегистрирован: 2011.09.28, 11:21

Re: Получение названий из базы

Сообщение ApJIeKuHo » 2013.12.17, 22:50

А где у вас там нет ПК?
Все он есть, просто является составным, чего вам и нужно будет указать) При этом в запросе при зацепке нужно добавить что вы передаете не один ключ, и связку, где один из них - это ид языка.
Попробуйте почитать в сторону составных ключей)
Стучитесь да откроется Вам, Молитесь да услышаны будете!
P.S.: Yii Jabber Conference: yii@conference.jabber.ru

Ответить