如何在推进中从多对多关系中检索行?

问题描述 投票:0回答:1

我没有在文档中找到如何选择嵌套属性。我需要这样的结果:

{
  "data": [
    {
      "Id": 3,
      "Fname": "Fname",
      "Lname": "Lname",
      "Mname": "Mname",
      "UserId": 1549,
      "Login": "manager",
      "Email": "[email protected]",
      "Password": null,
      "UserRole": [
        {
          UserRole object
        },
        {
          UserRole object
        },
        {
          UserRole object
        }
      ]
    }
  ],
  "totalCount": 1
}

但是我的代码

$items = PanelUserQuery::create()
    ->joinWithUser()
;
$itemsCollection = $items->find();
$totalCount = $items->count();
$itemsArray = $itemsCollection ? $itemsCollection->toArray(null, null, TableMap::TYPE_PHPNAME, true) : [];
var_dump($itemsArray);

返回此数组:

{
  "data": [
    {
      "Id": 3,
      "Fname": "Fname",
      "Lname": "Lname",
      "Mname": "Mname",
      "UserId": 1549,
      "Login": "manager",
      "Email": "[email protected]",
      "Password": null,
      "User": {
        "Id": 1549,
        "Login": "manager",
        "Email": "[email protected]",
        "Password": null,
        "PanelUsers": [
          "*RECURSION*"
        ]
      }
    }
  ],
  "totalCount": 1
}

我的架构:用户表

<table name="user">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
    <column name="login" type="varchar" size="999"/>

    <column name="email" type="varchar" size="999"/>
    <column name="password" type="varchar" size="40"/>
</table>

角色表

<table name="role">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
    <column name="name" type="varchar" size="999" required="true"/>
    <column name="guid" type="varchar" size="999" required="true"/>
    <unique>
        <unique-column name="name"/>
    </unique>
    <unique>
        <unique-column name="guid"/>
    </unique>
</table>

UserRole表

<table name="user_role" isCrossRef="true">
    <column name="user_id" type="integer" primaryKey="true"/>
    <column name="role_id" type="integer" primaryKey="true"/>
    <foreign-key foreignTable="user">
        <reference local="user_id" foreign="id"/>
    </foreign-key>
    <foreign-key foreignTable="role">
        <reference local="role_id" foreign="id"/>
    </foreign-key>
    <unique>
        <unique-column name="user_id"/>
        <unique-column name="role_id"/>
    </unique>
</table>

PanelUser表

<table name="panel_user">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
    <column name="fname" type="varchar" size="999"/>
    <column name="lname" type="varchar" size="999"/>
    <column name="mname" type="varchar" size="999"/>
    <column name="user_id" type="integer" required="true" />
    <foreign-key foreignTable="user" onDelete="CASCADE">
        <reference local="user_id" foreign="id" />
    </foreign-key>
    <behavior name="delegate">
        <parameter name="to" value="user" />
    </behavior>
</table>

我不明白如何检索UserRole属性并将其传递给PanelUser对象。请帮助了解查询方法或输入一些代码,请

php mysql sql propel propel2
1个回答
0
投票

[您不必展平整个结果集(->toArray()),您可以在$ itemsCollection-> UserRole上循环执行getUserRole()

foreach ($itemsCollection->getUserRole() as $userRole) {
    var_dump($userRole->toArray());
}
© www.soinside.com 2019 - 2024. All rights reserved.