У меня проблемы с отношениями с HABTM в CakePHP.
У меня есть две модели, такие как: Department
HABTM Location
. Одна крупная компания имеет много зданий, и каждое здание предоставляет ограниченное количество услуг. Каждое здание также имеет свою собственную веб-страницу, поэтому в дополнение к самой взаимосвязи HABTM каждая строка HABTM также имеет поле url
, куда пользователь может зайти, чтобы найти дополнительную информацию об интересующей его услуге и о том, как она работает в здании. они заинтересованы в.
Я настроил модели так:
<?php
class Location extends AppModel {
var $name = 'Location';
var $hasAndBelongsToMany = array(
'Department' => array(
'with' => 'DepartmentsLocation',
'unique' => true
)
);
}
?>
<?php
class Department extends AppModel {
var $name = 'Department';
var $hasAndBelongsToMany = array(
'Location' => array(
'with' => 'DepartmentsLocation',
'unique' => true
)
);
}
?>
<?php
class DepartmentsLocation extends AppModel {
var $name = 'DepartmentsLocation';
var $belongsTo = array(
'Department',
'Location'
);
// I'm pretty sure this method is unrelated. It's not being called when this error
// occurs. Its purpose is to prevent having two HABTM rows with the same location
// and department.
function beforeSave() {
// kill any existing rows with same associations
$this->log(__FILE__ . ": killing existing HABTM rows", LOG_DEBUG);
$result = $this->find('all', array("conditions" =>
array("location_id" => $this->data['DepartmentsLocation']['location_id'],
"department_id" => $this->data['DepartmentsLocation']['department_id'])));
foreach($result as $row) {
$this->delete($row['DepartmentsLocation']['id']);
}
return true;
}
}
?>
Контроллеры совершенно неинтересны.
Проблема:
Если я отредактирую имя Location
, все DepartmentsLocation
, которые были связаны с этим Location
, будут заново созданы с пустыми URL-адресами. Поскольку в моделях указывается, что unique имеет значение true, это также приводит к тому, что все новые строки перезаписывают более старые строки, что по существу уничтожает все URL-адреса.
Я хотел бы знать две вещи:
Могу ли я остановить это? Если да, то как?
И на менее техническом и более скулитом примечании: почему это вообще происходит? Мне кажется странным, что редактирование поля через Cake должно доставить столько хлопот, когда я могу легко пройти через phpMyAdmin, отредактировать там имя Location
и получить именно тот результат, который я ожидаю. Почему CakePHP касается данных HABTM, когда я просто редактирую поле в строке? Это даже не внешний ключ!