【问题标题】:Yii2 ActiveDataProvider query by ActiveQueryInterface ( querying with relations)Yii2 ActiveDataProvider 通过 ActiveQueryInterface 查询(用关系查询)
【发布时间】:2014-08-16 14:30:52
【问题描述】:

ActiveDataProvider 实现了一个基于 yii\db\Query 和 yii\db\ActiveQuery 的数据提供者。

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

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

【问题讨论】:

  • @lin Yii 不仅是 yii 1.x ,yii2 也是 Yii 的一部分
  • stackoverflow.com/tags/yii2/info,干杯。 Yii 2.0 is a complete rewrite of Yii 1.1 based on php 5.4 improvements and aims for simplicity, performance and extensibility.。你的问题标题也告诉我们,它是关于“Yii2”而不是“Yii”。不同的框架。
  • @lin Yii1 和 Yii2 是不同的框架,我同意,我知道标签在说什么,我们俩在不同的点上都对标签信息做出了贡献,我们应该知道它在说什么。我的观点是 Yii 也是项目的名称,而不仅仅是 Yii1。在 Yii2 的 223 个问题中,90 个也被标记为 Yii。如果你认为 Yii 应该只包含 Yii1 问题(我同意需要区分以防止混淆)我建议你在 meta 中提出问题并将其重命名 Yii1 或类似的东西,就像今天的 symfony 一样。否则让 Yii 只用于 Yii1.x 是没有意义的
  • @lin 实际上我确实在同一个应用程序中运行 Yii2 和 Yii,它甚至是官方文档的一部分,参见 yiiframework.com/doc-2.0/…。请参阅meta.stackoverflow.com/a/265845/1900483meta.stackoverflow.com/a/252988/1900483 和其他有关特定/通用标签的问题。我不会在 SO 中制定规则,如果您对版本相关规则的设置方式有疑问,请在 meta 中处理。无论哪种方式,这个讨论都与我的问题无关,我们可以在聊天或 IRC 中讨论它
  • 感谢您提供此信息:yiiframework.com/doc-2.0/…。看起来我们都是对的;)。

标签: php activerecord yii yii2


【解决方案1】:

在过去的 4 个小时里,我一直在为同样的问题苦苦挣扎。解决方案是使用 joinWith() 而不是 with()

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

【讨论】:

    【解决方案2】:

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

    你测试过这段代码吗?这应该有效。查看source of ActiveDataProvider this linethis line。他们检查$this->query 是否是ActiveQueryInterface 的一个实例,然后做一些事情。由于ActiveQueryInterface 扩展了Queryinterface,您的示例应该可以工作。如果没有,你会得到什么样的错误?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多