找到许多查询到很多关系推进(find query for many to many relation

2019-08-31 05:30发布

我是新的推进。 我面对的一个问题,以获取所有记录都形成表具有多对多的关系。

我有一个用户和组表。 和连接表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 ()  

请帮我何,我们可以解决这个问题。

Answer 1:

因为是在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 S和得到每个人的Group •不用额外的DB命中:

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

希望这可以帮助。 有最小化的查询信息使用“与()”上行走网站,以及许多一对多的关系信息 (与查询的例子)。



文章来源: find query for many to many relation propel