2013-09-27 58 views
0

如何獲取當前用戶發表評論的所有帖子。我有表格之間的關係,但情況對我來說很難。它應該是這樣的:如何獲取作者發表評論的所有帖子?

$posts = Yii::app()->user->comments->posts->findAll(); // don't think that is my code, it just for explanation of query chain 

所以我需要得到所有帖子,用戶留下評論。

在SQL我查詢工作正常:

SELECT tc.title, tc.content, t.post_id 
FROM tbl_comment t 
JOIN tbl_post tc 
ON t.post_id =tc.id 
WHERE author_id =43 
GROUP BY t.post_id 

$CD = new CDbCriteria; 
$CD->condition = 'tc.author_id='.Yii::app()->user->id; 
$CD->join = 'JOIN tbl_comment tc ON t.id=tc.post_id'; 
$posts = Post::model()->findAll($CD); 

這是它。

+0

您意識到您發佈的示例SQL非常不同,因爲它使用WHERE子句篩選而不是IN子句。 。 。你想爲那個SQL使用PHP,或者你的第一個例子顯示了什麼? – ernie

+0

我知道,因爲我試圖找到最佳的解決方案,沒有'IN'。 – Smash

+0

如果是這樣的話,這聽起來像你應該確保你的模型包含author_id,並且如果你知道author_id,那麼使用'addColumnCondition(array('author_id'=> $ value))'或類似的東西來編寫critiera。 。 。 – ernie

回答

2

而不是手動定義你的IN子句,您可以使用addInCondition(),即:

​​

您可以查看從Yii的文檔頁面的源代碼,你會看到那裏的代碼分解了參數然後加入它們,類似於@Wilq的建議。

0

讀你的代碼讓我覺得$ postIds是一個ID數組。是對的嗎 ? 如果是這樣,您不能將$ postIds分配給:id查詢參數,您需要每次都做一個單個發佈ID的多個查詢。

+0

'$ postIds是一個ID數組'是的! – Smash

+0

這將是不好的編碼....只是使用像@ernie建議的'IN'條件 –

1

如果您需要該參數的字符串,只需在陣列上執行implode()即可。

嘗試:

$criteria->params = array(':id' => implode(',',$postIds)); 
相關問題