0

Restaurant、RestaurantAddresses、RestaurantCuisines、Cuisineの4つのモデル。

View / Restaurants / index.ctpのページから、すべてのレストラン、住所、料理の種類を表示できます。

ただし、表示アクションと編集アクションをコーディングできません。両方のアクションに使用しているコードは次のとおりです。

アクションの編集(コード):

編集は機能しますが、Restaurant_AddressesテーブルとCucinesテーブルに2つのエントリが追加されます。

public function edit($ id = null){$ this-> Restaurant-> id = $ id;

              $this->loadModel('Cusine');
            $model_cusine_edit_data = $this->Cusine->find('list');
            $this->set('CusineEditList', $model_cusine_edit_data);



    if (!$this->Restaurant->exists()) {
        throw new NotFoundException('Invalid Restaurant');
    }

    if ($this->request->is('post') || $this->request->is('put')) {              

        $this->Restaurant->save($this->request->data);

            $this->Session->setFlash('The restaurant has been saved');
            $this->redirect(array('action' => 'index'));
        } else {
    $this->request->data = $this->Restaurant->read();
    }
}

アクションの表示(コード):

次のコードはレストランのみを表示します。名前情報、通りと郵便番号を見ることができません。

public function view($ id = null){$ this-> Restaurant-> id = $ id;

    if (!$this->Restaurant->exists()) {
        throw new NotFoundException('Invalid user');
    }

    if (!$id) {
        $this->Session->setFlash('Invalid user');
        $this->redirect(array('action' => 'index'));
    }
    $this->set('restaurant', $this->Restaurant->Read());


}
4

2 に答える 2

1

これが私があなたのメソッドをコーディングする方法です。データが表示されないことに関するあなたの主な問題は、readメソッドが最初のモデルデータのみを取得し、関連するデータを取得しないことだと思います...したがって、Model:の代わりにModel :: find()を実行します。 :read()とcontainパラメーターを使用して、関連するデータも取得します。

モデルの$actsAsパラメーターに「Containable」を追加することを忘れないでください。

public function edit($id=null){
    $this->Restaurant->id = $id;
    if (!$this->Restaurant->exists()) {
        throw new NotFoundException('Invalid Restaurant');
    }

     if(!empty($this->request->data)){
          if($this->Restaurant->save($this->request->data)){
              $this->Session->setFlash('The restaurant has been saved');
              $this->redirect(array('action' => 'index'));
          } else {
              $this->Session->setFlash('Unable to save the restaurant');
          }
     }


     $model_cusine_edit_data = $this->Restaurant->RestaurantCusine->Cusine->find('list');
     $this->set('CusineEditList', $model_cusine_edit_data);

     $this->request->data = $this->Restaurant->find('first', array('conditions'=>array('Restaurant.id'=>$id), 'contain'=>array('RestaurantAddresses','RestaurantCusine')));
}

public function view($id=null){
    $this->Restaurant->id = $id;

    if (!$this->Restaurant->exists()) {
        throw new NotFoundException('Invalid user');
    }

    if (!$id) {
        $this->Session->setFlash('Invalid user');
        $this->redirect(array('action' => 'index'));
    }

    $this->set('restaurant', $this->Restaurant->find('first', array('conditions'=>array('Restaurant.id'=>$id), 'contain'=>array('RestaurantAddresses','RestaurantCusine'))));
}
于 2012-05-15T22:41:58.950 に答える
0

ビューの場合は、find('first', array('conditions' => array('Restaurant.id' => $id), 'recursive' => 2));または、より適切な方法として、ContainableBehaviorフェッチするモデルを正確に選択できるを使用する必要があります。使用法と例については、本を検索してください。

編集に関しては、投稿データへのリンクを提供してください。

于 2012-05-15T22:26:54.020 に答える