Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在spreep中从多对多关系中检索行?_Php_Mysql_Sql_Propel_Propel2 - Fatal编程技术网

Php 如何在spreep中从多对多关系中检索行?

Php 如何在spreep中从多对多关系中检索行?,php,mysql,sql,propel,propel2,Php,Mysql,Sql,Propel,Propel2,我在文档中没有找到如何选择嵌套属性。 我需要这样的结果: { "data": [ { "Id": 3, "Fname": "Fname", "Lname": "Lname", "Mname": "Mname", "UserId": 1549, "Login": "manager", "Email": "manager@email.ru", "Password": null, "

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

{
  "data": [
    {
      "Id": 3,
      "Fname": "Fname",
      "Lname": "Lname",
      "Mname": "Mname",
      "UserId": 1549,
      "Login": "manager",
      "Email": "manager@email.ru",
      "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": "manager@email.ru",
      "Password": null,
      "User": {
        "Id": 1549,
        "Login": "manager",
        "Email": "manager@mail.ru",
        "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="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>

角色表

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

用户角色表

<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>
<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="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="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对象。帮助理解查询方法或文本一些代码,请

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

foreach ($itemsCollection->getUserRole() as $userRole) {
    var_dump($userRole->toArray());
}

谢谢你的回答