数据库表使用cakephp进行下拉选择

时间:2013-11-04 23:20:13

标签: php cakephp

我有一个控制器用于发票,另一个用于客户。

我在这些控制器的模型中建立了一些“关系”,如下所示:

Client.php

<?php

  class Client extends AppModel {
      public $hasMany = array(
          'Invoice' => array(
              'className' => 'Invoice',
              'foreignKey' => 'client_id'
           )
      );
   }

?>

Invoice.php

<?php

class Invoice extends AppModel {
    public $belongsTo = array(
        'Client' => array(
            'className' => 'Client',
            'foreignKey' => 'client_id'
        )
    );
}

?>

所以我认为与每个客户进行下拉很容易。虽然,我无法弄清楚如何做到这一点。

首先,这就是我想要的结果:

<select>
  <option value="1">Client Name</option>
</select>

其中value等于客户端表中的id,Client Name等于client表中的name。

我尝试将以下内容放入发票控制者:

$client = $this->Client->find('all');

然后在我的视图中进行以下操作:

echo $this->Form->select('client_name',client, array(
                'class' => 'form-control',
                'name' => 'client_id'
            ));

但是我收到了以下错误:

Call to a member function find() on a non-object    

直接在页面加载。我需要做些什么来完成这项工作?

1 个答案:

答案 0 :(得分:4)

很可能,您的问题是客户端模型未自动加载到Invoices控制器中。由于客户与发票有关系,因此您可以在客户端上调用find,而不是:

$data = $this->Invoice->Client->find('list', array('fields' => array('id', 'name')));
$this->set('clients', $data);

然后在视图中,

echo $this->Form->select('Invoice.client_id', $clients);

echo $this->Form->input('Invoice.client_id', array('type' => 'select', 'options' => $clients));

这应该输出一个下拉列表,其中值是客户端ID,下拉列表中的可见选项是客户端名称。在将发票与客户关联时,您需要使用id而不是客户名称。