0

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

在控制器方法中,我正在获取数据:

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'));将这些数据传递给我的模板。这似乎与其他控制器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,这是一个字符串(varchar在 MySQL 中)。但这已在 Table 类中定义:

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

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

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

CakePHP 版本是 3.8.12

4

0 回答 0