как определить два внешних ключа в cakePHP - PullRequest
3 голосов
/ 03 июля 2010

Я получил таблицу с несколькими столбцами.Таблица имеет первичный ключ (replyid) и два внешних ключа (userid и postid).

Вот структура таблицы: {replyid, content, userid, postid}

Стол ответов получил два внешних ключа.Я не уверен, правильно ли устанавливать внешние ключи следующим образом:

class Post extends AppModel{   
    var $name = 'Post';
    var $useTable = 'post';
    var $primaryKey = 'postid';
    var $belongsTo = 'User';
    var $hasMany = array(
        'Reply' => array(
            'className'     => 'Reply',
            'foreignKey'    => 'postid',          
            'foreignKey'    => 'userid'     
                        )
                        );  

                            }

?>

Не могли бы вы помочь?

Ответы [ 3 ]

1 голос
/ 03 июля 2010

Два внешних ключа подходят, но вы должны определить отношения в правильных моделях.

В вашем посте модель,

var $hasMany = array( 
    'Reply' => array( 
        'className'     => 'Reply', 
        'foreignKey'    => 'postid',           
        //'foreignKey'    => 'userid'
                    ) 
                    );   

В вашей пользовательской модели,

var $hasMany = array( 
    'Reply' => array( 
        'className'     => 'Reply', 
        //'foreignKey'    => 'postid',            
        'foreignKey'    => 'userid'      
                    ) 
                    );   
1 голос
/ 05 июля 2010

Создайте свои таблицы в базе данных и используйте cake bake для построения моделей - так вы увидите, как Cake обрабатывает их изначально. Я рекомендую вам назвать ваши столбцы БД как foreign_id. Это сделает жизнь намного проще.

1 голос
/ 03 июля 2010

К сожалению, CakePHP не поддерживает составные ключи или частичные первичные ключи. В соответствии с рекомендацией CakePHP , вы можете использовать прямые запросы, такие как:

CREATE TABLE posts_tags (
  id INT(10) NOT NULL AUTO_INCREMENT,
  post_id INT(10) NOT NULL,
  tag_id INT(10) NOT NULL,
  PRIMARY KEY(id)); 

... Или вы можете создать суррогатный ключ, возможно, значение автоинкремента. Вместо того, чтобы использовать автоинкрементный ключ в качестве первичного ключа, вы также можете использовать символ (36). Затем CakePHP будет использовать уникальный 36-символьный uuid (String :: uuid) всякий раз, когда вы сохраняете новую запись, используя метод Model :: save. (Из CakePHP Manual )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...