В 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');
}
?>
Это действительно ответ, который я собирался для того, чтобы знать, что он будет создавать дополнительные накладные расходы, как вы говорите. Моя конечная цель - работать наиболее эффективным образом, а «лишнее» - это не моя идея эффективности. Благодаря! – jedmao
По моему опыту, Cake не применяет FK к действию, в котором делает DB. Как вы можете вставить недопустимый ключ FK, в результате чего БД будет отклонять эту вставку, если DB FK-s на месте. Я думаю, что нужно знать это, прежде чем использовать Cake только для обработки FK-s. (Также обратите внимание, что Cake-схема обновления схемы CLI не обрабатывает базу данных DB FK: она может сохранять их, но обновления не будут выполняться, так как зависимости не создаются в правильном порядке.) – sibidiba