-1

ここで理解しようとしているのは、このエラーが何を意味し、何が間違っているのかということです。私は命名規則を台無しにしているに違いありません。

私のモデルは製品とカテゴリです。カテゴリには hasMany があり、products には belongsTo があります。

http://webdesign4.georgianc.on.ca/~100141468/comp2084/todo/products/add

http://webdesign4.georgianc.on.ca/~100141468/comp2084/todo/products/filter/9

名前y

Yを渡す

製品コントローラー

function filter($category_id) {
            $this->set('Product',$this->Product->findAllByCategoryId($category_id));
        }

追加

$this->loadModel('Category');
$this->set('Categorys',$this->Category->find('list',array('order'=> array('Category.name'))));

フィルター.ctp

<? foreach($Product as $row): ?>
     <tr><td>
<?=$row['Product']['id']?>
</td><td>
<?=$row['Product']['name']?>
</td><td>
<?=$row['Product']['price']?>
</td><td>
<?=$row['Category']['name']?>
</td><td>
<a href="edit/<?=$row['Product']['id']?>">Edit</a>
    </td></tr>
<? endforeach; ?>

add.ctp

<?php
        echo $this ->Form->input('name');
        echo $this ->Form->input('description');
        echo $this ->Form->input('price');
        echo $this ->Form->input('file', array('type' => 'file'));
        echo $this ->Form->input('Category_id');
        echo $this ->Form->end('submit',true); 
        ?>
4

2 に答える 2

2

debug($Product);Do you see a Categorykey?を実行することから始めます。そうでない場合は、 recursive を高く設定するか、 use をより適切に設定してContainableください。

追加するには、ビュー変数名をcategoriesに変更し、フォーム入力フィールドを に変更しますcategory_id(これは、データベースの規則に従っている場合であり、それは単なるタイプミスです)。

カテゴリが製品に関連する場合、 は必要ありませんloadModel

単純に$this->Product->Category->find...

于 2012-07-23T20:26:05.800 に答える
1

これは非常に簡単です..あなたはケーキの基礎を理解していません. 命名規則と関連付けに焦点を当てて、本とチュートリアルをもう一度読むことをお勧めします。

次の関連付けが必要です。

//product.php
var $belongsTo = array(
    'Category' => array(
        'className' => 'Category',
        'foreignKey' => 'category_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ));


// category.php
var $hasMany = array(
    'Product' => array(
        'className' => 'Product',
        'foreignKey' => 'category_id'
    )
);



// products_controller.php
function filter($category_id) {
    $this->set('products', $this->Product->findAllByCategoryId($category_id));
}

function add() {
    if (!empty($this->data)) {
        $this->Product->create();
        if ($this->Product->save($this->data)) {
            $this->Session->setFlash(__('The Product has been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The Product could not be saved. Please, try again.', true));
        }
    }
    $categories = $this->Product->Category->find('list');   
    $this->set(compact(array('categories')));
}

   // filter.ctp
   debug($products); // just to see what data has been returned

   // add.ctp
   echo $this->Form->create('Product');
   echo $this->Form->input('name');
   echo $this->Form->input('description');
   echo $this->Form->input('price');
   echo $this->Form->input('file', array('type' => 'file'));
   echo $this->Form->input('category_id'); // categories
   echo $this->Form->end('submit',true); 

キャッシュをクリアすると、これが機能するはずです。

于 2012-07-23T21:43:06.720 に答える