ActiveDataProvider基于yii \ db \ Query和yii \ db \ ActiveQuery实现数据提供程序。
但是参数$ query只实现了QueryInterface而不是ActiveQueryInterface,这对于ActiveDataProvider来说有点奇怪!..有没有办法用这样的关系进行查询?
provider = new ActiveDataProvider([
'query' => MainModel::find()
->with("relatedModel")
->where(["relatedModel.something"=>$value]),
]);
答案 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 ActiveDataProvider
和this line处的this line。如果$this->query
是ActiveQueryInterface
的一个实例,那么他们就会这样做,然后做某些事情。由于ActiveQueryInterface
扩展Queryinterface
,您的示例应该有效。如果没有,你会得到什么样的错误?
我认为如果你不使用ActiveQuery
,当我查看setSort
method时,你将无法轻松排序......