我将<?php
$pageNo = "1";
$jsonString = file_get_contents("http://api.domain.com/apikey/?
name1=value1&name2=value2&pageNo=$pageNo");
$jsonDecoded = json_decode($jsonString, true);
$csvHeader=array();
$csvData=array();
$csvFileName = 'output.txt';
$fp = fopen($csvFileName, 'w');
$counter=0;
foreach($jsonDecoded["result"]["items"] as $key => $value)
{
jsontocsv($value);
if($counter==0)
{
fputcsv($fp, $csvHeader, ';');
$counter++;
}
fputcsv($fp, $csvData, ';');
$csvData=array();
}
fclose($fp);
function jsontocsv($data)
{
global $csvData,$csvHeader;
foreach($data as $key => $value)
{
if(!is_array($value))
{
$csvData[]=$value;
$csvHeader[]=$key;
}
else
{
jsontocsv($value);
}
}
}
?>
与Symfony v3.4 branch
一起使用。
我无法将SQL查询转换为Doctrine ORM查询。
我有3张桌子。
用户 - &gt; 1:1 - &gt;坚定 - &gt; 1:1 - &gt;店
(Symfony开发人员工具栏报告表中的关联正确)。
我想在一个查询中获得与cretain Doctrine
对应的Shop
数据。
我的SQL,得到一个结果:
User
我的学说ORM查询
SELECT *
FROM mp2_fos_user as u
LEFT JOIN mp2_firm AS f ON u.id = f.firmUserId
LEFT JOIN mp2_shop AS s ON f.id = s.shopFirmId
WHERE u.id = 1
目前运行代码会导致错误
$query = $em->createQueryBuilder()
->select('u, f, s')
->from('App:User', 'u')
->leftJoin('u.userFirm WITH u.id = f.firmUserId', 'f')
->leftJoin('f.firmShop WITH f.id = s.shopFirmId', 's')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();
我的问题最佳做法是什么?
非常感谢帮助, 谢谢!
尝试:
[Syntax Error] line 0, col 57: Error: Expected end of string, got 'u'
得到$query = $em->createQueryBuilder()
->select('s.id')
->from('App:User', 'u')
->leftJoin('u.userFirm WITH f.firmUser = u', 'f')
->leftJoin('f.firmShop WITH s.shopFirm = f', 's')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();
答案 0 :(得分:2)
如果您在实体中定义了映射,则无需使用WITH
子句,当您想要使用其他匹配条件加入实体时,使用WITH
子句
class User
{
/**
* @ORM\YourRelationShipNature(targetEntity="App\Entity\Firm", mappedBy="user")
*/
private $userFirm;
}
class Firm
{
/**
* @ORM\YourRelationShipNature(targetEntity="App\Entity\Shop", mappedBy="firm")
*/
private $firmShop;
}
class Shop
{
//.....
}
然后你可以简单地使用属性加入你的entites
$query = $em->createQueryBuilder()
->select('u, f, s')
->from('App:User', 'u')
->leftJoin('u.userFirm', 'f')
->leftJoin('f.firmShop', 's')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();
答案 1 :(得分:0)
我正在考虑更多这方面的事情(假设实体名称是正确的):
$query = $em->createQueryBuilder()
->select('u, f, s')
->from('App:User', 'u')
->leftJoin('App:UserFirm f WITH f.firmUser = u')
->leftJoin('App:FirmShop s WITH s.shopFirm = f')
->where('u.id = :user_id')
->setParameter('user_id', $user_id)
->getQuery();