我工作的Symfony 3.2,我試圖做一個「簡單」的查詢。 這是工作的查詢(直接在phpMyAdmin測試)的Symfony和學說:DQL MAX()與GROUPBY
SELECT s.*
FROM pl_statsheet s
INNER JOIN (
SELECT day, MAX(points) AS points
FROM pl_statsheet
GROUP BY day
) ps
ON s.day = ps.day AND s.points = ps.points
Unfortunelty的SQL版本,我不能「轉換」它與Symfony的工作。希望得到一些幫助,請。這是我迄今爲止所做的。在我的倉庫
$query = $this->getEntityManager()
->createQuery(
'SELECT s
FROM PlayoffBundle:Statsheet s
INNER JOIN (
SELECT day, MAX(points) AS points
FROM PlayoffBundle:Statsheet
GROUP BY day
) AS ps
ON s.day = ps.day AND s.points = ps.points'
)
->getResult();
而這個錯誤的Symfony返回
QueryException: [Semantical Error] line 0, col 55 near '( SELECT': Error: Class '(' is not defined.
感謝您的幫助。 我還是Symfony的初學者;)
更新。
因爲我不符合原生SQL。我決定在2個查詢中這樣做。 1 /使用原生SQL,我將得到帶有最大值(點)的ID 2 /使用ORM,我只需要執行findById($ arrayIDs)。做這樣的,因爲我有多對多的關係,讓我得到充分的數據
所以它幾乎工作更容易,但對於原因,我不能已瞭解,我的第二個查詢給空這樣的:
Statsheet {#968 ▼
-id: 20
-stats: null
-points: null
-day: null
-player: null
-game: null
}
所以我做了一些測試。我知道,ID 20是最大值
例如,這樣的:
dump($em->getRepository('PlayoffBundle:Statsheet')->find(19));
- >將正確地給所有的數據。
dump($em->getRepository('PlayoffBundle:Statsheet')->find(20));
- >會給我只是貼了幾行字以上(空到處exept爲ID)
但是,如果我做了 - 在nativeSQL將前>查找(20),它使我的數據正確。
我不知道我的解釋是否足夠清楚。如果需要,我可以提供dump()消息和我的控制器/存儲庫/實體的代碼的屏幕截圖。
StatsheetRepository.php
public function getBestPickId()
{
$sql = 'SELECT s.* FROM pl_statsheet s INNER JOIN (SELECT day, MAX(points) AS points FROM pl_statsheet GROUP BY day) ps ON s.day = ps.day AND s.points = ps.points';
$rsm = new ResultSetMapping;
$rsm->addEntityResult('PlayoffBundle:Statsheet', 's');
$rsm->addFieldResult('s', 'id', 'id');
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
$picks = $query->getResult();
foreach($picks as $pick){
$ids[] = $pick->getId();
}
return $ids;
}
這是我的控制器
$bestpicksIds = $em->getRepository('PlayoffBundle:Statsheet')->getBestPickId();
$bestpicks = $em->getRepository('PlayoffBundle:Statsheet')->findById($bestpicksIds);
dump($em->getRepository('PlayoffBundle:Statsheet')->find(20));
dump($em->getRepository('PlayoffBundle:Statsheet')->find(19));
dump($bestpicks);
因此,讓我趕緊解釋。 ID 19不是最好的選擇,但20是。 所以 - >查找(19)給出需要 的所有數據,但 - >找到(20)和dump($ bestpicks)只給出了ID和數據的其餘部分是NULL 這裏是我的代碼做,現在(也許它會幫助理解):Dump Symfony
我知道這個問題來自於原生SQL查詢。我不知道它爲什麼會影響我的下一個查詢。所以這是我的情況的更新。我知道該怎麼解決,希望我會盡快回來與解決方案;)
我只想補充一點,我已經完成了我的nativeSQL將通過增加這些線路:
$rsm->addFieldResult('s', 'points', 'points');
$rsm->addFieldResult('s', 'stats', 'stats');
$rsm->addFieldResult('s', 'day', 'day');
但沒有按到目前爲止,使用諸如遊戲 $ rsm-> addMetaResult('s','game_id','遊戲')的外鍵似乎不起作用。
仍在工作。
謝謝! 因爲我的所有項目已經在使用ORM,所以我選擇了Native SQL方式。我有它的工作,但我有我的下一個查詢的結果問題。 我會用更多信息編輯我的主要信息。 –
也許你可以添加使用本機查詢的代碼 –
嗨,Sry沒有回答任何更早的,但我離開了最後幾天。所以我發現問題在哪裏。由於我只是試圖用我的本地SQL獲取「id」,它不知何故告訴symfony只接收下一個請求的id。 (不知道你明白我的意思。)無論如何。我通過選擇原生SQL中的整行來解決這個問題。我會盡快更新消息 –