2013-04-15 29 views
1

我是新的推進。 我面臨一個問題,要獲取所有記錄表格都有多對多關係的表格。找到查詢多對多的關係,推動

我有一個用戶和組表。和一個連接表user_group。

用戶和組具有多對多關係

且使用方法如下找到一個查詢所有相關的數據。

Schema.xml文件

<table name="user" phpName="User" idMethod="native"> 
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true" /> 
    <column name="name" type="VARCHAR" size="100" required="true" /> 
    <column name="email" type="VARCHAR" size="100" required="true" /> 
    <column name="age" type="INTEGER" required="true" /> 
    <column name="gender" type="VARCHAR" size="50" required="true" /> 
    <column name="company" type="VARCHAR" size="100" required="true" /> 
    <column name="address" type="VARCHAR" size="100" required="true" /> 
    <column name="country" type="VARCHAR" size="100" required="true" /> 
    <column name="mobileno" type="DOUBLE" required="true" /> 
    <column name="comment_about" type="VARCHAR" size="200" required="true" /> 
    <foreign-key foreignTable="post" name="post" phpName="postWriter"> 
     <reference local="id" foreign="user_id" /> 
    </foreign-key> 
</table> 

<table name="group"> 
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" /> 
    <column name="name" type="VARCHAR" size="32" /> 
</table> 


<table name="user_group" isCrossRef="true"> 
    <column name="user_id" type="INTEGER" primaryKey="true" /> 
    <column name="group_id" type="INTEGER" primaryKey="true" /> 
    <foreign-key foreignTable="user"> 
     <reference local="user_id" foreign="id" /> 
    </foreign-key> 
    <foreign-key foreignTable="group"> 
     <reference local="group_id" foreign="id" /> 
    </foreign-key> 
</table> 

,並和我試圖找到相關的數據是這樣

$userObj = UserQuery::create() 
     ->join('Group') 
     ->find(); 

但上述查詢給我一個致命錯誤

Fatal error: Uncaught exception 'PropelException' with message 'Unable to execute SELECT statement [SELECT user.id, user.name, user.email, user.age, user.gender, user.company, user.address, user.country, user.mobileno, user.comment_about FROM `user` INNER JOIN `` ON() 

請幫我何我們可以解決這個問題。

+0

什麼是你想反正與查詢來實現? – 1337holiday

+0

我想在單個查詢中像在cakephp中一樣獲取用戶和相關組。 我用這 $ groupobj = GroupQuery ::創建() - >找到(); ($ group-> getUsers() - > toArray());這個方法可以用來創建一個或多個數組。 } 上面的查詢將在foreach循環選擇查詢的用戶我認爲這是不相關的數據庫大小查找所有組與 –

回答

3

不能直接加入許多一對多的關係,因爲在MySQL的沒有這樣的事情。你可以做兩件事情之一......

如果你有一個User對象已經,那麼你可以簡單地「獲得」相關組是這樣的:

$relatedGroups = $userObject->getGroups(); 

如果沒有User對象着呢,要填充的所有記錄(用戶和組),那麼我認爲你可以這樣做:

$users = UserQuery::create() 
      ->join('User.UserGroup') 
      ->join('UserGroup.Group') 
      ->with('Group') // this line hydrates Group objects as well as Users 
      ->find(); 
在你的代碼,你可以

現在通過User小號循環,讓每個人的Group•不用額外數據庫命中:

foreach ($users as $user) { 
    $user->getGroups(); 
    // normally this would be an extra DB hit, but because we used "->with('Group')" 
    // above in the query, the objects are already hydrated. 
} 

希望這會有所幫助。有info on minimizing queries在Propel網站上使用「with()」以及info on many-to-many relationships(查詢示例)。

+0

感謝@jakerella用戶的好方法。非常感謝。 –

+0

當然,希望它有幫助。 – jakerella