有一种方法可以 select 我想用我的数据加载哪些虚拟字段?蛋糕PHP 3
There is a way to select which virtual fields I want to load with my data? Cakephp 3
我的实体上有一些虚拟字段,我的控制器上有一点我不想加载它们,只是不需要这些值。有没有办法不加载 my
中的虚拟字段
$this->Model->get($id)
?
类似于 unset
或 ['_virtual' => false]
谢谢!
我不相信虚拟字段实际上是生成的 直到 某些东西明确地执行它们 getter,即。一个 toArray()
调用,它可以通过将实体粘贴到 debug()
或 _serializing
中显示实体来自动触发,以获得 JSON 响应。简单地调用 Model->get()
不会播种这些虚拟值。
所以我认为没有几个选择:
选项 1: 如果您 通常 在大多数地方想要这些虚拟字段,但在这一次 get()调用,或者:
(a) 更改get() 之后的virtual listing at runtime,例如:
$entity = $this->Model->get($id)
$entity->setVirtual([]); // Or list just the properties you still want in the array
.。或 (b) 将它们标记为 hidden at runtime 这样它们就不会在任何显示值中自动引用,例如:
$entity = $this->Model->get($id)
$entity->setHidden(['virtual_field_you_want_to_hide']);
选项 #2: 如果实际上您 不希望 无论如何大多数时间都输出此字段(在 JSON exports 等等)并且只想在需要时引用它,这就是 Cake 的 $_hidden 的用途,在实体中将其标记为 $_hidden:
class MyEntity extends Entity
{
protected $_virtual = ['my_field'];
protected $_hidden = ['my_field'];
public function _getMyField(){
return 'my_field_value';
}
}
有了这个,简单地调用 get() 将不会调用虚拟字段的 getter,也不会以任何方式显示实体。只有直接调用该字段才会调用 _getMyField
getter,例如:
$entity = $this->Model->get($id);
print_r($entity); // Doesn't output my_field by default
echo $entity->my_field; // Only now call _getMyField, and this outputs "my_field_value"
我的实体上有一些虚拟字段,我的控制器上有一点我不想加载它们,只是不需要这些值。有没有办法不加载 my
中的虚拟字段$this->Model->get($id)
?
类似于 unset
或 ['_virtual' => false]
谢谢!
我不相信虚拟字段实际上是生成的 直到 某些东西明确地执行它们 getter,即。一个 toArray()
调用,它可以通过将实体粘贴到 debug()
或 _serializing
中显示实体来自动触发,以获得 JSON 响应。简单地调用 Model->get()
不会播种这些虚拟值。
所以我认为没有几个选择:
选项 1: 如果您 通常 在大多数地方想要这些虚拟字段,但在这一次 get()调用,或者:
(a) 更改get() 之后的virtual listing at runtime,例如:
$entity = $this->Model->get($id)
$entity->setVirtual([]); // Or list just the properties you still want in the array
.。或 (b) 将它们标记为 hidden at runtime 这样它们就不会在任何显示值中自动引用,例如:
$entity = $this->Model->get($id)
$entity->setHidden(['virtual_field_you_want_to_hide']);
选项 #2: 如果实际上您 不希望 无论如何大多数时间都输出此字段(在 JSON exports 等等)并且只想在需要时引用它,这就是 Cake 的 $_hidden 的用途,在实体中将其标记为 $_hidden:
class MyEntity extends Entity
{
protected $_virtual = ['my_field'];
protected $_hidden = ['my_field'];
public function _getMyField(){
return 'my_field_value';
}
}
有了这个,简单地调用 get() 将不会调用虚拟字段的 getter,也不会以任何方式显示实体。只有直接调用该字段才会调用 _getMyField
getter,例如:
$entity = $this->Model->get($id);
print_r($entity); // Doesn't output my_field by default
echo $entity->my_field; // Only now call _getMyField, and this outputs "my_field_value"