CakePHP访问我的视图的不同表

时间:2013-05-23 19:51:48

标签: cakephp

我有两个表Contact和Quote,这是一对多的关系(即一个联系人可以有很多引号)。外键都设置正确。

当我创建新报价时,我希望能够从联系人下拉列表中进行选择。

我的代码如下所示:

联系型号:

class Contact extends AppModel {        
    public $hasMany = array('Quote' => array('className' => 'Quote', 'foreignKey' => 'contact_id'));
}

引用模型

class Quote extends AppModel {      
    public $belongsTo = array('Contact' => array('className' => 'Contact', 'foreignKey' => 'contact_id'));

    public $validate = array(
            'name' => array(
                    'rule' => 'notEmpty'
            ),
            'amount' => array(
                    'rule' => 'notEmpty'
            )
    );      
}

在QuotesController中添加方法:

public function add() {
    // TODO: Update this so the user can select the id from a drop down list.  
    $this->request->data['Quote']['contact_id'] = '1';

    if ($this->request->is('post')) {                   
        $this->Quote->create(); // This line writes the details to the database.
        if ($this->Quote->save($this->request->data)) {             
            $this->Session->setFlash('Your quote has been saved.');
            $this->redirect(array('action' => 'index'));
        } else {                
            $this->Session->setFlash('Unable to add your quote.');
        }            
    }
}

正如您所看到的,我目前只是将用户ID硬编码为添加过程的一部分。

1 个答案:

答案 0 :(得分:1)

我假设您已阅读并在您的视图中使用此方法。

http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::select

不容易找到(或更容易被忽视)是:

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-list

所以在你想要的控制器中

$contacts = $this->Article->find('list', array('fields' => array('Contact.id', 'Contact.name'));
$this->set(compact('contacts'));

然后在视图中:

echo $this->Form->select('contact_id', $contacts);

修改查找字段以反映模型中的实际内容。如果您需要组合字段,则可以使用虚拟字段:http://book.cakephp.org/2.0/en/models/virtual-fields.html。否则,您可以选择需要合成的字段,并使用foreach循环将它们组合成id => [显示值]数组以传递给视图。只有id是重要的东西,并且必须与Contacts表中的id对应。