我需要结合几个表中的信息。如果使用实体,我应该为它们创建所有可能的字段作为属性 + 设置器/获取器。但是在保存对象时 - 我应该拆分/取消设置不在主表中的所有属性。
可能有更“真实”的方式来处理它,而不使用学说等。
我需要结合几个表中的信息。如果使用实体,我应该为它们创建所有可能的字段作为属性 + 设置器/获取器。但是在保存对象时 - 我应该拆分/取消设置不在主表中的所有属性。
可能有更“真实”的方式来处理它,而不使用学说等。
如果我是你,我会仔细看看 Hydrators:
创建一个实现 HydratorInterface 的新类:
namespace Zend\Stdlib\Hydrator;
interface HydratorInterface
{
/**
* Extract values from an object
*
* @param object $object
* @return array
*/
public function extract($object);
/**
* Hydrate $object with the provided $data.
*
* @param array $data
* @param object $object
* @return void
*/
public function hydrate(array $data, $object);
}
您需要实现 2 个功能:
extract($object);
Extract 将从对象创建一个数组。
hydrate(array $data, $object);
Hydrate 将从数组中创建一个对象。
当您进行选择时,您可以将所有字段放在 1 个数组中,因此将其放入对象中没有问题。提取时,您希望将其拆分。您可以通过以下方式实现提取:
public function extract($object)
{
return array(
'tbl1' => array(
'fld1' => $object->getFld1(),
'fld2' => $object->getFld2(),
'fld3' => $object->getFld3(),
),
'tbl2' => array(
'fld4' => $object->getFld4(),
'fld5' => $object->getFld5(),
),
'tbl3' => array(
'fld6' => $object->getFld6(),
'fld7' => $object->getFld7(),
'fld8' => $object->getFld8(),
'fld9' => $object->getFld9(),
),
);
}
然后,当您提取数据时,您可以将每组数据传递到正确的表以进行插入或更新。