2013-09-27 39 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)); 
相关问题