首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FOSUserbundle推送和相关数据

使用FOSUserbundle推送和相关数据
EN

Stack Overflow用户
提问于 2013-03-20 21:14:45
回答 2查看 1.2K关注 0票数 1

我正在使用FOSUserBundle,并创建了一个包含两列的消息表,这两列与来自FOSUserBundle的用户相关。

我想使用一个查询来获取关于作者的消息和信息。

下面是schema.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<database name="default" namespace="Acme\StoreBundle\Model" defaultIdMethod="native">

<table name="message">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
    <column name="title" type="varchar" size="64" required="true" defaultValue="(untitled)"/>
    <column name="content" type="longvarchar" />
    <column name="author_id" type="integer" required="true" />
        <foreign-key foreignTable="fos_user">
            <reference local="author_id" foreign="id" />
        </foreign-key>
    <column name="recipient_id" type="integer" required="true" />
        <foreign-key foreignTable="fos_user">
            <reference local="recipient_id" foreign="id" />
        </foreign-key>
</table>
</database>

我尝试了很多选择,但都没有结果。

当我尝试的时候,似乎是合乎逻辑的:

代码语言:javascript
复制
$messages = MessageQuery::create()
            ->join('Message.Authorid')
            ->findByRecipientId(1);

我得到一个错误:“未知表或别名消息”

通过以下方式:

代码语言:javascript
复制
->join('Authorid')

错误:“未知关系Authorid on the Acme\StoreBundle\Model\Message table”

我做错了什么?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2013-03-21 16:45:18

好吧,我发现了。

作者和接收者的架构必须如下所示:

代码语言:javascript
复制
...
<column name="author_id" type="integer" required="true" />
    <foreign-key foreignTable="fos_user" phpName="Author">
        <reference local="author_id" foreign="id" />
    </foreign-key>

<column name="recipient_id" type="integer" required="true" />
    <foreign-key foreignTable="fos_user" phpName="Recipient">
        <reference local="recipient_id" foreign="id" />
    </foreign-key>
...

最重要的部分是phpName。

现在是控制器。这里有一些奇怪的事情发生了,但它不会打扰你。

代码语言:javascript
复制
$messages = MessageQuery::create()
    ->find();

return $this->render('AcmeStoreBundle:Message:index.html.twig',
        array('messages' => $messages)
    );

在这段简单的代码之后,我可以访问从twig开始的所有内容。

在这一点上我想展示一个例子:

当控制器看起来像上面的时候,那么

代码语言:javascript
复制
# AcmeStoreBundle:Message:index.html.twig

messages

显示消息表的每个字段,如下所示:

代码语言:javascript
复制
Acme\StoreBundle\Model\Message_0: Id: 1 CreatedAt: !!php/object:O:8:"DateTime":3:    {s:4:"date";s:19:"2013-03-20 13:00:00";s:13:"timezone_type";i:3;s:8:"timezone";s:12:"Europe/Paris";} Title: (untitled) Content: 'test content' AuthorId: 1 RecipientId: 2 Acme\StoreBundle\Model\Message_1: Id: 2 CreatedAt: !!php/object:O:8:"DateTime":3:{s:4:"date";s:19:"2013-03-20 13:15:22";s:13:"timezone_type";i:3;s:8:"timezone";s:12:"Europe/Paris";} Title: (untitled2) Content: 'bla bla content 2' AuthorId: 2 RecipientId: 1 

正如您所看到的,与作者或接收者的关系没有任何关系,但是当我调用message.author.username或message.recipient.username (在消息的for循环中)时,我得到了这样的结果。而这正是我所期望的。

现在,当控制器看起来像:

代码语言:javascript
复制
$messages = MessageQuery::create()
        ->joinWith('Author')
        ->find();

return $this->render('AcmeStoreBundle:Message:index.html.twig',
        array('messages' => $messages)
    );

messages (在细枝中)抛出上述所有字段和一个author对象(由于模式中的phpName,因此称为author,而不是user )。

感谢你们阅读我的问题,感谢你们的参与。

票数 3
EN

Stack Overflow用户

发布于 2013-03-20 22:56:36

join方法使用表或phpName别名获取关系,而不是字段。因此,您可能需要:

代码语言:javascript
复制
->join("Message.Author")

或者,正如您的外键所暗示的,也许是这样?

代码语言:javascript
复制
->join("Message.FosUser")

更新

对于同一个表的两个FK引用,您需要使用外键标记的phpNamerefPhpName属性:

代码语言:javascript
复制
<table name="message">
  ...
  <foreign-key foreignTable="fos_user" phpName="Author" refPhpName="AuthoredMessage">
    <reference local="author_id" foreign="id" />
  </foreign-key>
  <foreign-key foreignTable="fos_user" phpName="Recipient" refPhpName="ReceivedMessage">
    <reference local="recipient_id" foreign="id" />
  </foreign-key>
</table>

然后,您可以尝试使用->join('Message.Author')->join('Message.Recipient')

请参阅documentation of the foreign-key element

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15524611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档