我正在尝试在我的控制器中访问getName(),但它无法正常工作。
不会工作:
$supplier = $em->getRepository('WICSupplierBundle:Supplier')->findBy(array('account'=>$account_id, 'id'=>$id));
$supplierName = $supplier->getName();
This doesnt return the name from the db....
I get the error: "Error: Call to a member function getName() on a non-object..."
DOES 有效:
$supplier = $em->getRepository('WICSupplierBundle:Supplier')->find($id);
$supplierName = $supplier->getName();
This returns the name from the db....
为什么呢?
答案 0 :(得分:5)
findBy返回一个数组,而不是一个对象。你的意思是findOneBy?
http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#querying
答案 1 :(得分:1)
因为“findBy”返回一个集合/数组。在你的工作实例(找到);它只查找ID字段引用的精确“一”结果,您可以直接从定义的变量中调用getters(getName())。
或者您可以使用findOneBy查看不同条件下的结果。
如果您想获得不同的供应商名称,则必须使用foreach函数来访问每个实体。
例如:
foreach($supplier as $s)
{
echo $s->getName();
}
答案 2 :(得分:0)
为了扩展Jessica的答案,findBy()
存储库方法将返回一个对象数组,这些对象是Supplier
实体的实例,而find()
将返回单个实体。如果您只期望一个,只需在第一个上调用getName方法。
$suppliers = $em->getRepository('WICSupplierBundle:Supplier')
->findBy(array(
'account' => $account_id,
'id' => $id
));
if (count($suppliers) < 1) {
// Assuming the code is in a controller
throw $this->createNotFoundException('No such supplier found.');
}
$supplierName = $suppliers[0]->getName();
或者更好,findOneBy()
$supplier = $em->getRepository('WICSupplierBundle:Supplier')
->findOneBy(array(
'account' => $account_id,
'id' => $id
));
if (!$supplier) {
throw $this->createNotFoundException('No such supplier found.');
}
$supplierName = $supplier->getName();
答案 3 :(得分:0)
替换它:
$supplier = $em->getRepository('WICSupplierBundle:Supplier')->findBy(array('account'=>$account_id, 'id'=>$id));
$supplierName = $supplier->getName();
使用:
$supplier = $em->getRepository('WICSupplierBundle:Supplier')->findOneBy(array('account'=>$account_id, 'id'=>$id));
$supplierName = $supplier->getName();
答案 4 :(得分:-2)
我环顾四周,我认为你需要使用多个阵列,
$supplier = $em->getRepository('WICSupplierBundle:Supplier')
->findBy(
array('account'=>$account_id), ## array 1
array('id'=>$id) ## array 2
);
$ supplierName = $ supplier-&gt; getName();
击>
更新:
好了再次重新阅读documentation后,我发现第二个数组是用于排序的。