2009-07-12 3 views

ответ

7

Вы можете видеть соглашения об именах, выложенные here.

Торт обрабатывает FK/отношения в коде, основываясь на ваших model associations и подразумеваемых ассоциациях по соглашениям об именах. Вы можете добавить дополнительный уровень «принуждения», определяя отношения FK на уровне базы данных. Если ваша база данных чтит их, вам будет тяжелее стрелять в ногу, но это не обязательно. Это добавляет дополнительные накладные расходы на синхронизацию отношений в моделях Cake и в базе данных.

+0

Это действительно ответ, который я собирался для того, чтобы знать, что он будет создавать дополнительные накладные расходы, как вы говорите. Моя конечная цель - работать наиболее эффективным образом, а «лишнее» - это не моя идея эффективности. Благодаря! – jedmao

+2

По моему опыту, Cake не применяет FK к действию, в котором делает DB. Как вы можете вставить недопустимый ключ FK, в результате чего БД будет отклонять эту вставку, если DB FK-s на месте. Я думаю, что нужно знать это, прежде чем использовать Cake только для обработки FK-s. (Также обратите внимание, что Cake-схема обновления схемы CLI не обрабатывает базу данных DB FK: она может сохранять их, но обновления не будут выполняться, так как зависимости не создаются в правильном порядке.) – sibidiba

1

В CakePHP не имеет значения, укажите ли вы FK на уровне базы данных, однако, если вы это сделаете, это будет действовать так, как вы ожидали бы в типичных операциях с базой данных.

Если у вас есть 2 таблицы - студенты и курсы, где каждый студент принадлежат к курсу, вы можете заявить об этом так:

<?php 
class Student extends AppModel { 
    var $name = 'Student'; 

    var $belongsTo = array(
     'Course' => array(
      'className' => 'Course', 
      'foreignKey' => 'course_id' 
     ) 
    ); 
} 
?> 

Конвенция является добавление «_id» в задней части особого класса имя модели, к которой принадлежит.

При использовании соглашения об именах CakePHP, вы можете просто состояние:

<?php 
class Student extends AppModel { 
    var $name = 'Student'; 

    var $belongsTo = array('Course'); 
} 
?> 
+0

AFAIK вам даже не нужно указывать 'var $ принадлежитTo = array ('Course'); 'если вы придерживаетесь соглашений об именовании Cake, это будет подразумеваться, если в таблице' students' есть поле 'course_id'. – deceze

 Смежные вопросы

  • Нет связанных вопросов^_^