CakePHP에서 HABTM 관계에 문제가 있습니다.CakePHP HABTM : 한 항목을 편집하면 HABTM 행이 다시 만들어지고 여분의 데이터가 삭제됩니다.
두 모델이 있습니다. 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
의 이름, 그 Location
에 링크 된 DepartmentsLocation
의 모든 빈 URL을 다시 만들어집니다를 편집합니다. 모델은 고유가 true를 지정하기 때문에 새로운 모든 행이 이전 행을 겹쳐 쓰게되므로 본질적으로 모든 URL이 삭제됩니다.
두 가지를 알고 싶습니다. 중단 할 수 있습니까? 그렇다면 어떻게?
그리고 기술이 적고 화제가되는 메모에는 왜 이런 일이 발생합니까? 내가 케익을 통해 필드를 편집하는 것이 너무 많은 문제를 야기한다는 것을 기괴하게 생각합니다. phpMyAdmin을 쉽게 방문하고 거기에 Location
이름을 편집하고 예상 한 결과를 정확히 얻을 수있을 때입니다. CakePHP가 연속으로 필드를 편집 할 때 HABTM 데이터를 만지는 이유는 무엇입니까? 외래 키조차 아니에요!
기존 HABTM 항목을 다시 만들지 말라는 HABTM 정의의 "unique"=> 'keepExisting'' 옵션에 유의하십시오. 실제로 새로운 관계를 저장하고 싶지만 * 추가 데이터를 잃고 싶지 않은 경우에 유용합니다. – Yogu