2011-09-16 7 views
0

작은 웹 사이트를 만들기 위해 cakePhp를 사용하기 시작했습니다. 나는 테이블 사이의 관계를 정의했고, 나는 알고 싶다 : 매번 관련된 데이터가로드 될 것인가? 현재보기에 따라 일부 연결된 테이블은 사용되지 않으며 실제로는 매번 쿼리됩니다.cakePhp의 외래 키 정의 : 지연로드?

그것이 우리에게 가져 오는 일에 큰 비용이 듭니다.

이런 종류의 관계를 유지하고 필요시에만 활성화하는 방법은 무엇입니까? 필요한 경우에만 관련 테이블을로드하는 일부 종류의 게으른로드?

답변

1

귀하의 질문을 실행하기 위해 필요없는 모델을 바인딩 해제하기 위해 케이크를 준비하십시오.

$this->unbindModel(array($relation => $model));

$ 관계는 - 다른 모델과의 관계입니다.

$ 모델 - 모델 이름.

eg: $this->Library->unbindModel(array('belongsTo' => array('Membership'),),false);

http://bakery.cakephp.org/articles/cornernote/2006/12/10/unbindall

1

@riky 의해 명시된 그 사용 unBindModel 후 제 recursive 적절한 레벨을 사용하여 시도. recursive 레벨 2를 사용하는 것과 같은 바보 같은 짓을하지 말고 원하지 않는 모든 모델의 바인딩을 해제하십시오.

1

will those related data loaded every time? 데이터 없음. 모델 : 예, 관련 모델이 초기화됩니다.

Because depending of the current view, some linked table will never be used, and actually they are queried every time. containable 또는 recursive을 사용하십시오.

It's a big cost for what it brings to us, no? 음, 어쩌면 많은 관계가 있다면. 그렇지 않으면 훨씬 편리합니다.

So how to have this kind of relationship and activate it only when we need it? Some kind of lazy loading which loads the related table only if I need it? 게으른로드가 가능하지 않다고 생각합니다. 즉석에서 항상 ModelModel을 바인딩 할 수 있습니다. 그러나 다시 말하지만, 작은 최적화에 대해 걱정하고 있다고 말하고 싶습니다. 이러한 모델을로드하는 데는 일반적으로 각 요청마다 몇 밀리 초가 소요됩니다.

+0

우리는 Ingres보기로 작업하고 있으므로 우리가하지 않는 모든 요청은 큰 시간을 얻는다는 것을 보장 할 수 있습니다. 우리는 조인과 함께 2-3 번 테이블을 기반으로하는 견해를 받기 때문에 ... 그리고 우리는이 구조를 변경할 방법이 없습니다 – J4N