CakePHP 3编辑表单未填充数据库对象

时间:2020-05-21 11:15:55

标签: php cakephp cakephp-3.8

我在CakePHP中构建了许多具有编辑(更新)功能的应用程序。我遇到了一个前所未有的问题,即使从数据库返回数据并且字段名称匹配,Cake也不会填充一组表单字段。

在Controller方法中,我正在获取数据:

public function edit() 
{
    $invno = '1234'; // This is dynamic from the URL but is here for the example

    $TblInvoicestobepaid = TableRegistry::getTableLocator()->get('TblInvoicestobepaid');
    $data = $TblInvoicestobepaid->find()->where(
            ['invno' => $invno]
        );
    if (!$data->isEmpty()) {
        $data = $data->first();
    }

}

如果我执行debug($data);,则可以看到该数据是从数据库返回的,并且是一个对象:

object(App\Model\Entity\TblInvoicestobepaid) {

'invno' => '1234',
'amount' => '1090',
'vat' => '218',
'total' => '1308',
'orgname' => 'Test Company',

}

然后我使用$this->set(compact('data'));将此数据传递到我的模板。这似乎与其他Controller edit()方法(包括已烘焙的方法)相同。

我正在使用表单帮助器,并且字段名称与上面对象中的键匹配,例如

<?php echo $this->Form->create(); ?>

<?php echo $this->Form->text('invno'); ?>
<?php echo $this->Form->text('amount'); ?>
<?php echo $this->Form->text('vat'); ?>
<?php echo $this->Form->text('total'); ?>
<?php echo $this->Form->text('orgname'); ?>

<?php echo $this->Form->end(); ?>

呈现了表单,但字段为空。

我注意到的一件事是,这是一个遗留应用程序,从中获取此数据的表没有id字段。主键是invno,这是一个字符串(MySQL中的varchar)。但这已在Table类中定义:

// src/Model/Table/TblInvoicestobepaidTable.php
public function initialize(array $config)
{
    parent::initialize($config);

    $this->setTable('tbl_invoicestobepaid');
    $this->setDisplayField('invno');
    $this->setPrimaryKey('invno');
}

通过Controller中的add()方法插入数据没有任何问题。但是当涉及到编辑时,并没有填充表格,我也不明白为什么。

CakePHP版本为3.8.12

0 个答案:

没有答案