dea*_*ase 8 php doctrine doctrine-orm
我用
$myblogrepo = $this->_doctrine->getRepository('Entities\Blog')->findBy(array('id' => 12);
Run Code Online (Sandbox Code Playgroud)
我通过访问
foreach($myblogrepo as $key =>$value){
echo $key . $value;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得字段名称?我认为key =>会起作用,但它将键打印为0
所以我认为这会奏效:
foreach($myblogrepo[0] as $key =>$value){
echo $key . $value;
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有..}
tim*_*dev 19
很可能,您的Blog实体的属性被声明为protected.这就是为什么你不能从实体本身外部迭代它们的原因.
如果您以只读方式使用Blog实体,并且只需要访问标记为@Columns的属性(读取:您不需要调用实体上的任何方法),您可以考虑使用array-hydration .这样你将处理简单的数组,$k=>$v类型迭代将正常工作.
否则,您需要在实体类上创建某种getValues()方法.这可能是一个简单的实现,只是构建和数组并返回它.
最后,您可以创建一个通用的getValues()作为实用程序函数,该函数使用doctrine的类元数据来确定列和实体具有哪些内容,并对这些数据进行操作.像这样的简单实现:
function getEntityColumnValues($entity,$em){
$cols = $em->getClassMetadata(get_class($entity))->getColumnNames();
$values = array();
foreach($cols as $col){
$getter = 'get'.ucfirst($col);
$values[$col] = $entity->$getter();
}
return $values;
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 上面这个方法的一个更成熟的版本似乎可以在这里找到 - 我还没玩过它,但看起来很有希望.
| 归档时间: |
|
| 查看次数: |
10337 次 |
| 最近记录: |