2013-03-20 70 views
1

我正在使用FOSUserBundle,並且我創建了一個消息表,其中包含兩個與FOSUserBundle中的用戶相關的列。使用FOSUserbundle推進和相關數據

我想使用一個查詢來獲取有關作者的消息和信息。

繼schema.xml中:

<?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> 

我嘗試許多選項,沒有結果。

當我嘗試,似乎是合乎邏輯的:

$messages = MessageQuery::create() 
      ->join('Message.Authorid') 
      ->findByRecipientId(1); 

我得到一個錯誤: 「未知表或別名消息」

有了:

->join('Authorid') 

錯誤:「未知關係Acme \ StoreBundle \ Model \ Message表中的Authorid「

我在做什麼錯?

謝謝你的幫助。

回答

1

join方法使用表或phpName別名的關係,而不是字段。所以你可能想要:

->join("Message.Author") 

或者,正如你的外鍵暗示,也許這樣?

->join("Message.FosUser") 

UPDATE

有兩個FK引用到同一個表,你將要使用外鍵標籤的phpNamerefPhpName屬性:

<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

未知表或別名消息 500內部服務器錯誤 - PropelException 在這兩種情況下。 ;/ – Mate 2013-03-20 15:52:11

+1

我想你需要找出那個其他類的名字是什麼......如果它是'User',那麼在點('.')之後的部分應該是'User'。我認爲你說對了。無論如何,需要知道Propel認爲連接類是什麼。哦!但是我看到你有兩個FK引用同一張表......可能有問題。查看我的更新。 – jakerella 2013-03-20 15:57:13

3

好的,我發現了。

爲作者和接受者的模式有看起來像:

... 
<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。

現在控制器。這裏發生了一些奇怪的事情,但它不會打擾。

$messages = MessageQuery::create() 
    ->find(); 

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

在這段簡單的代碼之後,我可以訪問樹枝上的所有東西。

此時我想要顯示一個例子:

當控制器看起來像上面,然後

# AcmeStoreBundle:Message:index.html.twig 

messages 

顯示像消息表的各個領域:

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循環的消息中)時,我是gettin g這個。這就是我的預期。

而現在,當控制器的樣子:

$messages = MessageQuery::create() 
     ->joinWith('Author') 
     ->find(); 

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

消息(在樹枝)拋出所有類似上面的領域,和作者的對象(因爲phpName的所謂作家,而不是用戶,從架構)。

謝謝你們閱讀我的問題和許多thx參與。