尝试从Symfony中的数据库检索数据失败


Trying to retrieve data from database in Symfony fails

我正试图用以下代码从数据库中检索数据:

    $user = $this->get('security.context')->getToken()->getUser();
    $pm = $this->getDoctrine()
    ->getRepository('LoginLoginBundle:Privatemessage')
    ->findOneByUser_userid($user->getUserid());

然后在我的小树枝文件中,我使用这个:

        {% for i in 0..(pm|length-1)%}
            <tr>
                <td>{{pm[i].sender}}</td><td></td><td>{{pm[i].subject}}</td>
            </tr>
            <tr>
                <td>{{pm[i].contents()}}</td>
            </tr>
        {% endfor %}

然而,这失败了,并给了我以下错误:

Impossible to access a key "0" on an object of class "Login'LoginBundle'Entity'Privatemessage" that does not implement ArrayAccess interface in LoginLoginBundle:Default:manager.html.twig at line 20 

如果我使用findall(),一切都很好,但我得到了所有的对象,我只需要几个。

findOneBy()方法仅用于查询对象的一个实例。它不返回一个可以迭代的集合。

在您共享的代码中,您只获取Privatemessage的一个实例,并试图将其当作私有消息的集合进行操作。你不能那样做。

当您使用findAll()时,您的代码运行良好,因为findAll()返回了一个可以迭代的私有消息的ArrayCollection。

如果您想基于任何给定的约束只获取部分私人消息,则必须在查询时应用筛选器。

我想您想要检索给定用户的所有私有消息并显示它们。在这种情况下,应该使用findBy*()而不是findOneBy*()。前者将返回一个ArrayCollection,而不仅仅是PrivateMessage的一个实例。

$user = $this->get('security.context')->getToken()->getUser();
$pm = $this->getDoctrine()
    ->getRepository('LoginLoginBundle:Privatemessage')
    ->findByUser_userid($user->getUserid());

我还建议使用Twigfor来遍历集合中的每个项目,如下所示:

{% for message in pm %}
    <tr>
        <td>{{message.sender}}</td><td></td><td>{{message.subject}}</td>
    </tr>
    <tr>
        <td>{{message.contents()}}</td>
    </tr>
{% endfor %}

您可以在此处阅读文档。