在官方的docs中,我读到:


  请记住,虚拟字段不能在发现中使用。如果希望它们成为实体的JSON或数组表示形式的一部分,请参阅公开虚拟字段。


我不清楚第二句话是否与第一个句子有某种联系(例如,作为克服限制的一种解决方法),或者它们是完全独立的。

我的意思是:如果公开虚拟字段,那么可以在find语句中使用它吗?

有没有一种方法可以在查询中包含虚拟字段?这是一个真实的例子:

ItemOrdersTable.php:

$this->setTable('item_orders');
$this->setDisplayField('summary'); // virtual field
$this->setPrimaryKey('id');


实体:

protected $_virtual = [
    'summary'
];

protected function _getSummary()
{
    return $this->name . ' ' . $this->description;
}


控制器中的用法:

return TableRegistry::get('itemOrders')->find('list')->where(['order_id' => $id]);


因为我将'summary'指定为DisplayField,所以我期望所有符合where子句的记录的键值列表,其中id为键,而summary虚拟字段为值。因为这不会发生(返回的对象为null),所以我试图了解我的代码是否错误或者我没有正确阅读上述要求的文档。

最佳答案

自定义键值输出:

https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#customize-key-value-output

更新:

$results = TableRegistry::getTableLocator()->get('item_orders')
    ->find('list')
    ->where(['order_id' => $id]);

  debug($results->toArray());
  $this->set('orders', $results);
  debug($orders); exit; <-- test results, and post in your question.

关于mysql - CakePHP:可以在查找中使用虚拟字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56224302/

10-10 06:35