2011-04-08 4 views
1

시나리오 :CakePHP는 - HABTM - 뷰에 여러 테이블에서 데이터를 전송

3 tables: 
restaurants 
cuisines 
features 

2 join tables: 
cuisines_restaurants 
features_restaurants 

질문 :

무엇 내 컨트롤러에서 단일 레스토랑에 대한 데이터를 얻을 수있는 가장 좋은 방법은 레스토랑 데이터뿐만 아니라 요리 및 특징을 포함하는보기.

$restaurant = $this->Restaurant->find('all', array('conditions' => array('Restaurant.id' => $id))); 
$this->set('restaurant', $restaurant); 

그리고이 같은 뷰에 전화 해요 : :

나는이 작업 한

echo "<span class='label'>Name:</span> " . $restaurant[0]['Restaurant']['name'] . "<br />"; 
echo "<span class='label'>Cuisine:</span> "; 
    $cuisineList = ""; 
    foreach($restaurant[0]['Cuisine'] as $cuisine) { 
     $cuisineList .= $cuisine['name'] . ", "; 
    } 
    echo substr($cuisineList,0,-2) . "<br />"; 

(및 기능에 대한 반복)

을하지만이 보인다 내가보기에 모든 Cake 튜토리얼에서 컨트롤러의 뷰 메소드는 다음과 같습니다.

$this->set('restaurant', $this->Restaurant->read(null, $id)); 

그런 다음 그들은 다음과 같이 호출 :

echo $restaurant['Restaurant']['name']; 
...etc 

를 다시 - 그것은 작동하고 - 난 그냥 더 좋은 방법이 있는지 알고 싶다 - 나는 현재는 비교 정치 못한 것 같다하고 있어요 방식으로 모든 다른 매끄러운 것 케이크는 나를 위해 도움이된다! :)

+0

모델에 재귀 세트가 있습니까? 재귀를 최대 2로 설정하면 거대한 데이터 세트를 다시 얻어야합니다. Containable을 살펴보면 데이터 세트를 줄이는 데 도움이됩니다. 내 머리 꼭대기에서, 당신이하는 일은 모든 데이터를 반환해야합니다. –

답변

1

귀하의 근무 코드는 Model::find('all')이며, 레스토랑 데이터를 하나만 검색하려면 Model::find('first')을 사용하고 싶습니다. 전화의 첫 번째 매개 변수를 'all'에서 'first'으로 변경하면 원하는 형식으로 원하는 데이터를 얻을 수 있습니다. 하지만,

$data = $this->Restaurant->find('first', array(
    'conditions'=>array('Restaurant.id'=>$id) 
)); 

또는

$data = $this->Restaurant->read(null,$id); 

Model::read

은 본질적으로 Model::find('first')에 대한 래퍼입니다 :


은 다소 접선 방향으로, 말 그대로 다음의 두 호출에 의해 반환 된 데이터 사이에는 차이가 없다 또한 모델의 내부 상태를 조금 설정합니다 (데이터를 반환하기 전에 Model::idModel::data 속성을 설정 함). Model::find('first')으로 검색).

+1

그냥 메모 - $ this-> Restaurant-> recursive = 1; (하지만 당신은 정확히 맞았습니다 - $ this-> Restaurant-> read는 잘 작동했습니다. 나는 이미 그것을 시도 했었다고 맹세 합니다만, 나는 그것을 들어야한다는 자신감이 여러분의 코드를 좀더 자세하게 설명해야한다고 생각합니다 - 감사! – Dave

관련 문제