Как указать оба ключа в отношениях Kohana 3 ORM - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть таблица ответов и таблица пользователей.Мне нужно связать их, но я должен использовать пользовательские ключи в обеих таблицах (т.е. я не использую 'id' ни в одной из них).Обе таблицы имеют поле «facebook_id», которое их связывает.

В модели Ответа я определяю пользователя «own_to», и я могу определить иностранный ключ Ответчика, но как я могу сказать «ссылка Ответ пользователю, используя facebook_id наобе таблицы "?

1 Ответ

2 голосов
/ 18 ноября 2011

Похоже, что это возможно только путем изменения моделей _primary_key на facebook_id

После изучения структуры класса ORM вы увидите, что таблицы объединены следующим образом

    elseif (isset($this->_belongs_to[$column]))
    {
        $this->_load();

        $model = $this->_related($column);

        // Use this model's column and foreign model's primary key
        $col = $model->_table_name.'.'.$model->_primary_key;
        $val = $this->_object[$this->_belongs_to[$column]['foreign_key']];

        $model->where($col, '=', $val)->find();

        return $model;
    }

Как вы упомянули, вы можете использовать

protected $_belongs_to = array('user' => array('foreign_key' => 'facebook_id')

Но это приведет к

answers.id = users.facebook_id

Но если вы измените первичный ключ в ответах с id на facebook_id, вот так

protected $_primary_key = 'facebook_id';

Тогда, конечно, последний запрос приведет к

answers.facebook_id = users.facebook_id
...