0

我试图在我的控制器中访问 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..."

确实有效:

 $supplier = $em->getRepository('WICSupplierBundle:Supplier')->find($id);
 $supplierName = $supplier->getName();
 This returns the name from the db....

为什么?

4

5 回答 5

5

findBy 返回一个数组,而不是一个对象。你是说 findOneBy 吗?

http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#querying

于 2013-06-07T19:21:15.750 回答
1

因为“findBy”返回一个集合/数组。在您的工作示例中(查找);它只查找通过 ID 字段引用的确切“一个”结果,您可以直接从定义的变量中调用 getter (getName())。

或者您可以使用 findOneBy 根据不同的条件查看一个结果。

如果您想获得不同的供应商名称,您必须使用 foreach 函数来访问每个实体。

例如 :

foreach($supplier as $s)
{
   echo $s->getName();
}
于 2013-06-08T14:12:13.960 回答
0

只是为了扩展杰西卡的答案,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();
于 2013-06-08T14:11:36.123 回答
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(); 
于 2014-08-07T05:35:08.133 回答
-2

我环顾四周,我认为您需要使用多个数组,

$supplier = $em->getRepository('WICSupplierBundle:Supplier')
->findBy(
array('account'=>$account_id),  ##  array 1 
array('id'=>$id)                ##  array 2
);

$supplierName = $supplier->getName();
更新:好的,再次阅读文档后,我注意到第二个数组用于排序。

于 2013-06-07T21:24:33.543 回答