如何访问控制器中的虚拟字段而不是 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'];
我在 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'];