public function getImages() { return $this->hasMany(ImageManager::class, ['item_id' => 'id']) ->andWhere(['class' => self::tableName()])->orderBy('sort'); }
Это в banners
дальше не подскажу, нужны программисты, но тут таких нет.
Ахах) И на этом спасибо))
В rules моделей следует добавить правило по типу: ... [[self::ITEM_ID_FIELD], 'exist', 'targetClass' => ImageManager::class, 'targetAttribute' => [self::ITEM_ID_FIELD => ImageManager::ID_FIELD]], ... Описанный метод построил корректно, но условие и сортировку здесь добавлять не надо. Просто: ``` public function getImages() { return $this->hasMany(ImageManager::class, ['item_id' => 'id']); } А where и orderBy сделаешь на уровень выше Ещё рекомендую помещать в класс моделей константы с наименованием полей. Так будет проще потом их редактировать и использовать Так же ты можешь в нотации вынести связь. Так: ``` /** *... *@property ImageManager[] $images *... */ ``` Тогда сможешь обращаться как к объекту типа: ... foreach($result->images() as $image) { $images->getId(); } ...
Спасибо большое) Ща буду пробовать
Мне чат гпт, сгенерил этот гож. И он работает)) $query = Banners::find() ->select(['banners.*', 'image_manager.name']) ->Leftjoin('image_manager', 'banners.id = image_manager.item_id') ->where(['alias' => 'banner-home']) ->all();
Это выборка через Join. Допустимый вариант. Но правильнее через модель. Особенно, если будете работать над кодом не один и необходимость маппить данные таким образом повторяется в разных сервисах/контроллерах
Обсуждают сегодня