【问题标题】:Fatal error: Call to a member function getId() on array in symfony致命错误:在 symfony 中调用数组上的成员函数 getId()
【发布时间】:2019-03-13 10:51:20
【问题描述】:

这是我的实体 Feed 的自定义存储库函数的内容。

SearchController.php

$searches=$this->getDoctrine()-getRepository('UserBundle:User')->findPersonType(1);

存储库功能:

public function findPersonType($usertype)
    {
        $queryBuilder = $this->createQueryBuilder('u')
            ->addSelect("u")
            ->where('u.personType = :personType')
            ->setParameter('personType', $usertype);
        try {
            $query = $queryBuilder->getQuery();
            return $query->getResult();
        } catch (NonUniqueResultException $e) {
            return null;
        }
    }

当我尝试在 mycontroller 中使用循环时

foreach ($searches->getId() as $s) {

     echo '<pre>';
     print_r($s->getAccreditationdata());
     echo '<br>';

}
die;

我有一个错误:

致命错误:调用数组上的成员函数 getId()

如果我喜欢这种方式,它工作正常:

foreach ($searches as $s) {

    echo '<pre>';
    print_r($s->getId());
    echo '<br>';
}
die;

我得到以下用户 ID:12345、1234567、234567

现在,对于这些用户 ID,我想进一步找到认证和部门,两者在用户实体中都有多对多的关系。那么,如何在搜索页面的列表中获取所有这些用户的多个“部门”和“认证”数据?

编辑:

以下是部门和认证的用户实体关系。

/**
     * @ORM\ManyToMany(targetEntity="UserBundle\Entity\Sectors", inversedBy="user", cascade={"persist"})
     * @ORM\JoinTable(
     *      joinColumns={@ORM\JoinColumn(onDelete="CASCADE")},
     *      inverseJoinColumns={@ORM\JoinColumn(onDelete="CASCADE")}
     * )
     */
    public $sectors;

    /**
     * @ORM\ManyToMany(targetEntity="UserBundle\Entity\Accreditations", inversedBy="user" , cascade={"persist"})
     * @ORM\JoinTable(
     *      joinColumns={@ORM\JoinColumn(onDelete="CASCADE")},
     *      inverseJoinColumns={@ORM\JoinColumn(onDelete="CASCADE")}
     * )
     */
    public $accreditationdata;

【问题讨论】:

  • 在您的工作示例中调用print_r($s-&gt;getId()); 的不是print_r($s-&gt;getAccreditationdata());

标签: php symfony many-to-many


【解决方案1】:

如果您在“搜索”实体和“用户”实体之间有关系,您可以这样做

foreach ($searches as $s) {
echo '<pre>';
// Instead of print_r($s->getId());
// Try
print_r($s->getUser()->getSectors());
print_r($s->getUser()->getAccreditationdata());
echo '<br>';
}
die;

【讨论】:

    【解决方案2】:

    这段代码不起作用吗?它与您的相同,但循环中没有“getId()”。

    foreach ($searches as $s) {
    
         echo '<pre>';
         print_r($s->getAccreditationdata());
         echo '<br>';
    
    }
    die;
    

    【讨论】:

    • 不,它不像你所看到的那样 $searches 有这么多用户的大量数据。我想在搜索结果中显示用户列表,并在表格中显示他们的多个认证数据,每个认证都依赖于也需要在部门列中显示的部门
    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 2015-06-16
    • 1970-01-01
    • 2017-06-24
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多