erniesto77
@erniesto77
oop, rb, py, php, js

Как правильно вставить строку в таблицу, у которой несколько primary key?

Есть zend framework 1.12 и модель в которой в качестве primary key массив с тремя ключами
class Admin_Model_DbTable_Starring extends My_Db_Table
{
    protected $_name = 'starring';

    protected $_primary = array('play_id', 'person_id', 'role_id'); // если тут не массив, а строка с 1 ключом, то все норм
    protected $_rowClass = 'My_Db_Table_Row';
    public $prefix  = 'str';

    ...


Вставка строки в таблицу происходит таким образом (все параметры приходят как числа, проверял):
$starringModel = new Admin_Model_DbTable_Starring();

    $row = $starringModel->createRow();
    $row->play_id = $play_id;
    $row->person_id = $person_id;
    $row->role_id = $role_id;
    $row->status = 2;

    $row->save();


Запись нормально создается, но после вставки в ответе сервера вываливается Notice Array to string conversion in /var/www/html/library/Zend/Db/Statement/Pdo.php on line 228
Такая ерунда только с таблицами, где более 1 ключа primary key: $_primary = array('play_id', 'person_id', 'role_id'). Там где ровно 1 ключ и он равен строке, например $_primary = 'play_id' все нормально.

Как избавиться от этого Notice? Кто нибудь сталкивался с таким?
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Более одного первичного ключа быть не может.
Вообще никак не может.
Первичный ключ может быть только один.

Но первичный ключ может быть составным.
Судя по характерному php E_NOTICE, в zend fw составной первичный ключ указывается каким-то другим способом, потому что код пытается привести $_primary к строке и за это получает E_NOTICE.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы