Php 通过ActiveQueryInterface进行Yii2 ActiveDataProvider查询(使用关系查询)

Php 通过ActiveQueryInterface进行Yii2 ActiveDataProvider查询(使用关系查询),php,activerecord,yii,yii2,Php,Activerecord,Yii,Yii2,ActiveDataProvider基于yii\db\Query和yii\db\ActiveQuery实现数据提供程序 但是,$query参数只实现QueryInterface,而不实现ActiveQueryInterface,这对于ActiveDataProvider!来说有点奇怪!。。有没有办法用这样的关系进行查询 provider = new ActiveDataProvider([ 'query' => MainModel::find() -&g

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

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

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

因为我不能评论,我会补充一个答案

你测试过这个代码吗?这应该行得通。看看这张照片。他们检查
$this->query
是否是
ActiveQueryInterface
的一个实例,然后做一些事情。由于
ActiveQueryInterface
扩展了
Queryinterface
您的示例应该可以运行。如果不是,你会得到什么样的错误


我认为,如果您不使用
ActiveQuery
,当我查看过去4小时我一直在为同一问题挣扎的…

时,您将无法轻松排序。解决方案是使用joinWith()而不是with()

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

@林奕不仅是yii1.x,yii2也是Yii的一部分,干杯<代码>Yii 2.0是基于PHP5.4改进的Yii 1.1的完全重写,旨在实现简单性、性能和可扩展性。。你的题目也告诉我们,是关于“Yii2”而不是“Yii”。不同的框架。@lin Yii1和Yii2是不同的框架我同意,我知道标签上写着什么,我们两人都在不同的点上贡献了标签信息,我们应该知道标签上写着什么。我的观点是,Yii也是项目的名称,而不仅仅是Yii1。在Yii2中的223个问题中,有90个也被标记为Yii。如果您认为Yii应该只包含Yii1问题(我同意需要进行区分以防止混淆),我建议您在meta中提出一个问题,并将其重命名为Yii1或类似的名称,比如今天的symfony。否则,将Yii仅用于Yii1是没有意义的。x@lin实际上我在同一个应用程序中运行了Yii2和Yii,它甚至是官方文档的一部分。请参阅,以及关于特定/通用标记的其他问题。我没有在中制定规则,因此,如果您对如何设置与版本相关的规则有问题,请在meta中进行讨论。无论哪种方式,此讨论都与我的问题无关,我们可以在聊天室或IRC中讨论此问题。感谢提供此信息:。看来我们都是对的;)。