是GridView与用户。
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'attribute' => 'userType',
'value' => 'userType.Name',
'filter' => false,
],
'username',
],
]); ?>
用户有一个类型 ( userType)。如果您分配给query类参数,则选择将是惰性的,并且页面上的查询结果将是:ActiveDataProviderUser::find()
SELECT COUNT(*) FROM `user`
SELECT * FROM `user` LIMIT 20
SELECT * FROM `usertypes` WHERE `UserTypeId`=1
SELECT * FROM `usertypes` WHERE `UserTypeId`=1
SELECT * FROM `usertypes` WHERE `UserTypeId`=2
如果选择是贪婪$query = User::find()->joinWith('userType');的,那么结果将是:
SELECT COUNT(*) FROM `user` LEFT JOIN `usertypes` ON `user`.`UserTypeId` = `usertypes`.`UserTypeId`
SELECT `user`.* FROM `user` LEFT JOIN `usertypes` ON `user`.`UserTypeId` = `usertypes`.`UserTypeId` LIMIT 20
SELECT * FROM `usertypes` WHERE `UserTypeId` IN (1, 2)
问题:我能否以某种方式影响延迟/贪婪加载,以便选择不是通过星号'*',而是通过我指定的字段?因为如果表很大,那么选择所有字段并不完全正确。
joinWith可以格式化为数组,其中键是关系的名称,值可以是一个匿名函数,作为输入\yii\db\ActiveQuery,您可以使用它对表执行标准操作。结果: