我有这个,但是它分别加载每一ebay
行,生成数千个SQL语句:
$products = \app\models\Product::find()
->joinWith('ebay', false, 'inner join')
->indexBy(function($row){return $row->ebay->epid;})
->all();
我尝试了这个,但是它给出了一个错误: 'Getting unknown property: 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产品。然后,将在没有数据库查询的情况下对数组建立索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句