таблице Stat
сама таблица простая:
key varchar(250)
idEntity varchar(10)
date date
value decimal(12,2)
Пытаюсь сделать с ->joinWith('example') (названия не реальные)
public function getExample()
{
return $this->hasOne(\common\models\Stat::class, ['idEntity' => 'idParent'])
->select(['idEntity', 'MAX(value) AS all'])
->andWhere(['key' =>'order']);
}
В результате ожидаю получить join с полем all, но джойнятся только оригинальные названия полей. Это нужно для того, чтобы можно было сджойнить по другому ключу в этот же запрос общий. Как это реализовать?
hasOne создает связь, в нем не пишут select. Select пишите там где вы делаете joinWith
Спасибо, переписал вот так: ->joinWith(['allStat' => function ($query) { $query ->select(['idEntity', 'MAX(value) AS all']) }]) А как это значение получить? $result->allStat->all выбросит ошибку.
Почему не так например? ->joinWith('...')->addSelect(['idEntity', 'MAX(value) AS all'])
Потому что если я в этом же запросе сделаю такой-же джойн не по ключу order, а другому, value будет общим при выборке. А мне надо будет делать такой джойн.
А если: ->joinWith('...')->joinWith('...')->addSelect(['all1', 'all2']) и сделать две hasOne разных, внутри которых ваши as all1 и as all2?
Переписал на ->joinWith(['allStat' => function ($query) { $query ->select(['idEntity', 'MAX(value) AS all1']); }]) ->addSelect('all1') ->asArray() // Чтобы получить поле в массиве Пишет Column not found: 1054 Unknown column 'all1' in 'field list'
->addSelect('allStat.all1')
то же самое, но теперь не находит allStat.all1
Как-то мне кажется вы переусложняете. Вот так если сделать? ->joinWith('allStat')->select(['MAX(allStat.value) AS all'])->asArray()->all(); и public function getAllStat() { return $this->hasOne(\common\models\Stat::class, ['idEntity' => 'idParent'])->andWhere(['key' =>'order']); }
возможно в MAX(allStat.value) вместо allStat реальное имя таблицы нужно будет подставить
Обсуждают сегодня