Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 Symfony条令查询-获取每个父项的子项列表_Php_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php Symfony条令查询-获取每个父项的子项列表

Php Symfony条令查询-获取每个父项的子项列表,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我目前正在尝试创建一个查询,该查询返回一个包含父名称和子名称列表的结果 例如,假设我们有两个表Category和Product,其中Category有许多Product实体。我知道我可以使用getProducts()直接访问子级,或者如果我没有使用共享ID和连接的关联设置。然而,在这一点上,我不确定如何继续,本质上,我想要的结果如下: | Category.name | Product.name | | Cars | BMW, Volvo, Fiat | Bikes

我目前正在尝试创建一个查询,该查询返回一个包含父名称和子名称列表的结果

例如,假设我们有两个表
Category
Product
,其中
Category
有许多
Product
实体。我知道我可以使用
getProducts()
直接访问子级,或者如果我没有使用共享ID和连接的关联设置。然而,在这一点上,我不确定如何继续,本质上,我想要的结果如下:

| Category.name | Product.name |
| Cars          | BMW, Volvo, Fiat
| Bikes         | BMX, Mountain Bike, Road Bike
$queryBuilder->select('c', 'p')
   ->from('Module\Entity\Category', 'c')
   ->leftJoin('c.products', 'p');
$results = $queryBuilder->getQuery()->getResult();
我想我正在寻找的SQL术语是,但它似乎不在我的字典中。因此,在我开始尝试安装一个我不太理解的扩展之前,我想知道是否有一个更简单的解决方案使用条令和默认查询生成器

更新:

使用@Wilt的答案,我稍微扩展了一下,得出了上面的精确表格:

$qm = $this->getEntityManager()->createQueryBuilder();
$qm->select('c', 'p')
   ->from('AppBundle:OmicsExperimentTypeStrings', 'c')
   ->leftJoin('c.omicsExperimentSubTypeStrings', 'p');
// Get query result as array for easier manipulation.
$results = $qm->getQuery()->getArrayResult();

$res = [];

// Iterate array structure and get c.name and an array of p.name.
foreach($results as $category) {
    $res[$category['name']] = [];
    foreach([$category['products']] as $productsArray) {
        foreach ($productsArray as $product) {
            array_push($res[$category['name']],$product['name']);
        }
    }
}

return $res;

您只需在您的案例中使用fetch join即可。
在中查看有关fetch join的条令文档

在查询生成器中,您可以按如下方式获取联接:

| Category.name | Product.name |
| Cars          | BMW, Volvo, Fiat
| Bikes         | BMX, Mountain Bike, Road Bike
$queryBuilder->select('c', 'p')
   ->from('Module\Entity\Category', 'c')
   ->leftJoin('c.products', 'p');
$results = $queryBuilder->getQuery()->getResult();
现在,
$results
保存了一个类别集合,其中每个类别都填充了其产品集合


更新 我认为最好是获取对象并从视图中的对象(或您需要的任何位置)创建数组
如果确实只想获取字段,可以更改select子句以选择所需的字段。不确定生成的数组是否正是您想要的,但您可以尝试:

$queryBuilder->select('c.name', 'p.name')
    ->from('Module\Entity\Category', 'c')
    ->leftJoin('c.products', 'p');
$results = $queryBuilder->getResult();

现在,结果包含一个包含您选择的字段的数组。

事实证明,我遇到的问题比我想象的要多,您能否更新您的答案,使其仅选择
类别.name
产品.name
?我尝试自己修改它,但到目前为止都没有成功。我所做的是在使用
getArrayResult()
运行查询后编辑查询,但我想我也可以直接在查询本身中进行编辑?@Darkstarone我添加了一个更新。我希望它返回您想要的数组(我没有测试它)…第二个查询返回一个数组,其中每个条目都是一个单独的
p.name
封装在它自己的数组中。谢谢你的努力,我可以好好利用我的工作!