通过ActiveQueryInterface查询Yii2 ActiveDataProvider(查询关系)

时间:2014-08-16 14:30:52

标签: php activerecord yii yii2

ActiveDataProvider基于yii \ db \ Query和yii \ db \ ActiveQuery实现数据提供程序。

但是参数$ query只实现了QueryInterface而不是ActiveQueryInterface,这对于ActiveDataProvider来说有点奇怪!..有没有办法用这样的关系进行查询?

provider = new ActiveDataProvider([
    'query' => MainModel::find()
              ->with("relatedModel")
              ->where(["relatedModel.something"=>$value]),
]);

2 个答案:

答案 0 :(得分:4)

我在过去4小时内遇到了同样的问题。解决方案是使用 joinWith()而不是与()

$provider = new ActiveDataProvider([
    'query' => MainModel::find()
              ->joinWith("relatedModel") //here change the with() to joinWith()
              ->where(["relatedModel.something"=>$value]),
]);

答案 1 :(得分:1)

由于我无法发表评论,我将添加一个答案......

你测试过这段代码吗?这应该工作。查看source of ActiveDataProviderthis line处的this line。如果$this->queryActiveQueryInterface的一个实例,那么他们就会这样做,然后做某些事情。由于ActiveQueryInterface扩展Queryinterface,您的示例应该有效。如果没有,你会得到什么样的错误?

我认为如果你不使用ActiveQuery,当我查看setSort method时,你将无法轻松排序......