maxxdev
(Maxx)
January 5, 2012, 12:56pm
1
Есть таблица goods с полями id(PK) и cat_number.
В моделе Goods переопределяю первичный ключ
public function primaryKey()
{
return 'cat_number';
}
Код контроллера
$model=Goods::model()->findByPk($id);
или
$model=$this->loadModel($id);
Генерирует Sql код:
SELECT * FROM `goods` `g` WHERE `g`.`id`=1388 LIMIT 1
вместо ожидаемого
SELECT * FROM `goods` `g` WHERE `g`.`cat_number`=1388 LIMIT 1
Непонятно почему происходит такое поведение…
Yii 1.9, таблица InnoDB
andy_s
(Arekandrei)
January 5, 2012, 1:06pm
2
Если у таблицы уже есть PK, то ActiveRecord в метод primaryKey() даже не посмотрит. Однако ничто не запрещает изменить значение primaryKey напрямую через tableSchema, хотя сам не пробовал (да и выглядеть будет немного кривовато)
maxxdev
(Maxx)
January 5, 2012, 1:19pm
3
andy_s:
Если у таблицы уже есть PK, то ActiveRecord в метод primaryKey() даже не посмотрит. Однако ничто не запрещает изменить значение primaryKey напрямую через tableSchema, хотя сам не пробовал (да и выглядеть будет немного кривовато)
Изменение через tableShema к сожалению не помогло…
public function getTableSchema()
{
$table = parent::getTableSchema();
$table->columns['cat_number']->isPrimaryKey = true;
return $table;
}
andy_s
(Arekandrei)
January 5, 2012, 2:14pm
4
Я имел в виду что-то типа:
public function init()
{
$schema = $this->getTableSchema();
$schema->primaryKey = 'cat_number';
}
P.S. Хотя init() не самое лучшее место для этого, а скорее всего и работать даже не будет.
ncs
(Mradar)
January 7, 2012, 1:32pm
5
А зачем это вообще делать?
maxxdev
(Maxx)
January 7, 2012, 4:16pm
6
Нельзя трогать структуру БД, но задача требует использовать другое поле в качестве PK