如何访问控制器中的虚拟字段而不是 cakephp 3.2 中的模型实体

How to access virtual field in controller instead of model entity in cakephp 3.2

我在 model/entity/Order.php .

中实现了虚拟文件

但我只想访问一个页面,我不想为所有功能调用它。所以在控制器中我如何访问虚拟字段,以便它只适用于我需要的部分.

在cakephp2x版本中,我做了控制器,但是这次在3X中我无法制作。

下面我附上了一些代码

如有任何建议,我们将不胜感激。 谢谢。

Model/Entity/Order.php

 protected $_virtual = ['amount'];

    protected function _getAmount() {


            $data = [];
            $data['due'] = $this->_properties['collection']['due_amount'];
            $data['paid'] = $this->_properties['collection']['total_sale_amount'] - $this->_properties['collection']['due_amount'];
            return $data;
        }

控制器中的代码

   $Lists = $this->Orders->find('all')->where($condition)->contain(['Collections','Customers'=> ['queryBuilder' => function ($q) {
                               return $q->select(['id','center_name']);
                              }],])->order(['Orders.due_date ASC']);

您通过声明函数 _get* 使用了实体的 getter 方法。您的 getter 方法名称是 _getAmount(),因此您可以通过控制器 $entity->amount();

中的实体对象访问它
$Lists = $this->Orders->find('all')->where($condition)->contain(['Collections','Customers'=> ['queryBuilder' => function ($q) {
                               return $q->select(['id','center_name']);
                              }],])->order(['Orders.due_date ASC']);

// Iteration will execute the query.
foreach ($Lists as $entity) {
        echo $entity->amount;
}

检查关于 virtual field in CakePHP 3.x

的文档

实体中也不需要下面的行,所以将其删除,因为您使用的是 getter 方法。

protected $_virtual = ['amount'];