join - 如何在 Yii2 中使用 join 和 indexBy?

标签 join activerecord yii2

我有这个,但它单独加载每个 ebay 行,生成数千条 SQL 语句:

$products = \app\models\Product::find()
    ->joinWith('ebay', false, 'inner join')
    ->indexBy(function($row){return $row->ebay->epid;})
    ->all();

我尝试了此操作,但出现错误:'获取未知属性:app\models\Product::ebay.epid'

$products = \app\models\Product::find()
    ->joinWith('ebay', false, 'inner join')
    ->indexBy('ebay.epid')
    ->all();

设置急切加载= true 也没有帮助。它仍然单独加载每一行,然后在最后再次加载它们。

如何高效连接 Yii 中的表并按连接表中的值建立索引?

最佳答案

您将无法使用indexBy来做到这一点。但是,ArrayHelper::index 可以在相关模型字段上索引数组。因此,可以这样做:

$products = \app\models\Product::find()
    ->with('ebay')
    ->all();

ArrayHelper::index($products, 'ebay.epid');

该代码将运行两个查询,一个用于获取所有产品,一个用于获取所有相关的 eBay 产品。然后该数组将被索引,根本不需要数据库查询。

关于join - 如何在 Yii2 中使用 join 和 indexBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854318/

相关文章:

mysql - 2加入mysql之间的区别

mysql 按日期查找不同表中的记录数

ruby-on-rails - 只查询组内最大值的记录

ruby-on-rails - 如何在 Rails 3 的表格列中找到最小值

css - 如何在 yii2 中设置 RadioList 的样式?

javascript - 在 yii2 中的 wbraganca 动态表单中自动填充文本框中的值

sql - 在 Access SQL 查询中禁用括号

mysql - 将 id 替换为现有查询中另一个表的名称

ruby-on-rails - 范围的倒数

php - Yii2 ~ SQL JOIN 2 个表