나는 얼마 동안 Kohana를 사용하고 있습니다. "belongs_to"나는, "has_many", "has_one"를 사용하고 문제없이, 내 질문은 :Kohana - ORM 확인 (해결됨)
이 같은 두 테이블이있는 경우 :
tbl_foo1
id | tbl_foo2_id | field1
-------------------------
1 | 2 | bar
2 | 1 | foo
tbl_foo2
을id | field1
-----------
1 | foo
2 | bar
나는 tbl_foo1이 tbl_foo2에 속하고 tbl_foo2가 많은 tbl_foo1을 가지고 있습니다. 지금까지 그렇게 좋았습니다.
내가 컨트롤러의 관계를 저장하려고하면 문제가 .. 그래서이 코드가 있습니다
$t1 = ORM::factory('tbl_foo1')->values($values, $expected)->create();
$t2 = ORM::factory('tbl_foo2', $_POST['id']);
$t1->tbl_foo2_id = $t2;
$t1->save();
확인이 작동합니다,하지만 난이 최선의 해결책 아니라고 생각 어느 것도 가장 아름다운. 이유는 2 가지가 있습니다. 성능 때문에 1입니다. 3 개의 쿼리 ($ t1을 저장하기 위해 1, $ t2를 찾기 위해 1, $ t2와 $ t2의 관계를 저장하기 위해 3 개)와 빈 레코드를 저장할 수 있으므로 2, $ t2에있는 레코드의 존재를 확인합니다.
제 질문은 어떻게해야합니까?
고맙습니다.
내 자신의 솔루션은 내가 biakaveron 준 솔루션을 사용, 감사합니다.
public function rules()
{
'foo2_id' => array('not_empty')
}
: 나는 규칙 기능을 추가 tbl_foo1
모델 $t2 = ORM::factory('tbl_foo2', $_POST['id']);
$t1 = ORM::factory('tbl_foo1')->values($values, $expected);
$t1->foo2 = $t2; // foo2 is a belongs_to relationship
$t1->create();
: 하지만 여전히, 검증 문제는 ..이 있었다 그래서 나는 같은 예제를 사용하여, 약간의 시간을 할애하고 해결책을했다
이렇게하면 다른 쿼리를 수행 할 필요가 없습니다. 이는 성능에 좋으며 간단한 방법입니다. ORM이 모델 tbl_foo2
의 ID를 찾을 때 찾지 못하면 NULL을 반환하므로 아무리해도 항상 빈 것입니다.
참고 : DB 트랜잭션도 사용 했으므로 (이는 프로세스의 일부일 뿐이 기 때문에) 어떤 이유로 쿼리 중 하나가 중단되면 쿼리가 실행되지 않습니다. 단지 트랜잭션을 지원하는 하나의 데이터베이스 엔진 (InnoDB)을 사용해야한다는 것을 기억하십시오.
나는이 문제와 관련이있는 [이 질문] (http://stackoverflow.com/questions/9574548/kohana-orm-validate-the-belongs-to-relationship-exists)을 발견했다. 성능의 문제 .. Kohana 그것을 할 수있는 더 좋은 방법이 있어야합니다! – TheGiantBeast