2010-03-19 147 views
0

我有一個使用symfony 1.4(我認爲它使用的是教條1.2)的教條的一個小問題。我有2個查詢,在mysql控制檯中使用raw sql,他們產生相同的結果集。查詢可以使用以下代碼生成:學說問題 - 不同的查詢,相同的結果,但不與學說

$dates = Doctrine::getTable('Picture') 
       ->createQuery('a') 
       ->select('substr(a.created_at,1,10) as date') 
       ->leftjoin('a.PictureTag pt ON a.id = pt.picture_id') 
       ->leftjoin('pt.Tag t ON t.id = pt.tag_id') 
       ->where('a.created_at <= ?', date('Y-m-d 23:59:59')) 
       ->orderBy('date DESC') 
       ->groupby('date') 
       ->limit(ITEMS_PER_PAGE) 
       ->offset(ITEMS_PER_PAGE * $this->page) 
       ->execute(); 

如果我刪除了兩個連接,它會更改查詢,但結果集是相同的。 但是使用doctrine execute(),只產生一行。

有人對這裏發生了什麼有個想法嗎?

PS:圖片表有ID,標題,文件,created_at(格式 'Y-M-d H:I:S'),標籤表ID,名稱和PictureTag與id和兩個外鍵的關係表。

PS 2:這裏是產生的兩個SQL查詢(第一個加入無)

SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4 

SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l LEFT JOIN lupa_picture_tag l2 ON (l.id = l2.picture_id) LEFT JOIN lupa_tag l3 ON (l3.id = l2.tag_id) WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4 

回答

0

那麼,解決方案是...除substr()之外,它需要表的另一列。使用select(substr(),a.created_at)使其工作

1

我有這個星期類似的東西。 Doctrine生成的SQL(來自Symfony調試工具欄)在phpMyAdmin中運行良好,但在運行查詢時失敗,如同在您的問題中一樣。嘗試添加下面的到你的查詢:

->setHydrationMode(Doctrine::HYDRATE_SCALAR) 

,看看它給你預期的結果。如果是這樣,則使用圖片主鍵作爲集合中的索引取決於Doctrine_Collection。如果你有超過1個結果具有相同的索引,Doctrine將拒絕將它添加到集合中,所以你最終只能得到1個結果。我最終使用不同的表而不是我想要的來運行查詢,這導致了一個獨特的主鍵,然後我想要的結果出現了。

+0

現在它返回零行XD 我想我解決了它...除了substr(),它需要表的另一列。使用select(substr(),a.created_at)使其工作(現在) – Leprosy 2010-03-19 19:32:41

+0

確認...它正在工作...:P – Leprosy 2010-03-19 19:41:00

+1

遇到過一些我認爲是由此問題導致並解決它的問題 - 現在我知道!鉭 – benlumley 2010-03-20 00:27:35