2012-06-01 3 views
2

을 가지고, 관련 기록을 삭제 : "질문에"- < "옵션" 내 클래스 구조는 [질문은 많은 옵션이 있습니다] : 질문내가 두 테이블 같은 사이 has_many 관계가 has_many 관계

class Model_Admin_sysQuestion extends ORM { 

protected $_table_name = 'questions'; 

protected $_has_many = array(
    'options' => array(
     'model' => 'Admin_sysQuestionOption', 
     'foreign_key' => 'question_id', 
    ), 
);... . 
에 대한

: 다음 코드로 모든 옵션 질문을 삭제하는 옵션

Class Model_Admin_sysQuestionOption extends ORM { 

protected $_table_name = 'questions_options'; 
protected $_belongs_to = array(
    'question' => array(
     'model' => 'Admin_sysSection', 
     'foreign_key' => 'question_id', 
    ), 
); .... . 

및 메신저에 대한

6,

$question = ORM::factory('Admin_sysQuestion', 30); 
     $question->options->delete($question->id); 
     $question->delete(); 

하지만 오류를

오류를주고있다 ":"이로드되지 않기 때문에 admin_sysquestionoption 모델을 삭제할 수 없습니다 "

어떤 생각을.? 그것을하는 방법?

foreach($question->options->find_all() as $option) 
{ 
    $option->delete(); 
} 

을 또는 여러 삭제에 대한 DB QBuilder를 사용 : 여러 관계를로드 할 때

답변

4

당신은 find_all를 호출해야합니다

당신은 또한 MySQL의 옵션이 @biakevoron의 게시물에 추가
DB::delete('questions_options') 
    ->where('question_id', '=', 30) 
    ->execute($this->_db); 
1

; options 테이블에 on delete cascade 요구 사항이있는 두 테이블 간의 관계를 추가하기 만하면됩니다. 개인적으로, 나는 또한 작업중인 현재 오브젝트에 관계형 인 오브젝트/행을 점검하여 명시 적 (관계형 오브젝트 삭제)을 암시적인 측면으로 다루고 있습니다. 실제로 MySQL이 자신의 업무를 수행한다는 것을 믿을 수 있어야합니다 (꽤 잘하는). 관계를 변경하거나 표를 MyIsam으로 전환하면 표가 실제로 너무 커질 때까지 눈치 채지 못할 것입니다.

다음 표와 함께 주위를 둘러 봅니다. 그것은 옵션 테이블에 엄격한 belongs-to 관계를 강제합니다. 옵션이 부모가 존재할 때만 존재할 수 있음을 의미합니다.

CREATE TABLE `options` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `question_id` int(10) unsigned NOT NULL, 
    `option` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


CREATE TABLE `questions` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `question` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


ALTER TABLE `options` 
    ADD CONSTRAINT `options_belongs_to` FOREIGN KEY (`id`) REFERENCES `questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

주 -. 유일한 제한은 당신이 summary heremore extensive version here

체크 아웃, 기본의 MyISAM 엔진 약간 다릅니다 InnoDB의 엔진에서 테이블을 (둘 필요가있다
관련 문제