Как получить доступ к...

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Как получить доступ к...

Сообщение УютныйЧайник »

Привет умные люди! С помощью joinWith сджойнил две таблицы, но не понимаю как получить доступ к тому, что находится в *yii\db\BaseActiveRecord*_related. Посмотрите, пожалуйста, скриншот и подскажите как получить доступ к свойствам [expansion].
Изображение
Я знаю только как получить доступ к свойствам $servers. Вот так: $servers[0]->id... Пробовал такой вариант $server[0]['expansion']->id но это не работает. Это вообще возможно?
codrilla
Сообщения: 173
Зарегистрирован: 2013.03.06, 12:24
Откуда: Молдова, Тирасполь

Re: Как получить доступ к...

Сообщение codrilla »

$servers[0]->expansion->id
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

codrilla спасибо за ответ. я попробовал. ошибок не выдает, но просто ничего не выводится на экран.
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

Или если я не в ту сторону копаю, как мне выводить то что я приджойнил?
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Как получить доступ к...

Сообщение r3verser »

может очепятка? у тебя сначала $servers... а потом $server...
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

Да. это опечатка. Но в коде ее точно нет. Вопрос актуален. Как то же можно вывести вместо idшника то что требуется с помощью сджойнивания таблиц.
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Как получить доступ к...

Сообщение r3verser »

Погоди, а у тебя relation указан в модели Servers?
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

Да. Вот:
public function getExpansion()
{
return $this->hasOne(Expansion::className(), ['id' => 'expansion']);
}
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Как получить доступ к...

Сообщение r3verser »

Я так понимаю ['id' => 'expansion'] в поле expansion хранится id экспаншена? Релейшены генерил через gii?
Если relation есть, то joinWith впринципе писать не обязательно, можно просто echo \app\models\Server::findOne(10)->expansion->name;
Yii2 последней версии?
В логах ошибки есть?
И приведи тогда весь код запроса с джойнами своими.
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

релейшены не через gii, а копипаст с документации.
echo \app\models\Server::findOne(10)->expansion->name; тоже возвращает null. несмотря на то, что в дебаггере видно что свойства есть, что видно на скриншоте.
yii2 последняя
в логах ошибок нет.
Делаю так в контроллере:
$servers = Server::find()->joinWith('expansion')->all();
Запрос такой получается: SELECT `server`.* FROM `server` LEFT JOIN `expansion` ON `server`.`expansion` = `expansion`.`id`
Вопрос актуален. Очень хочется решить данную загвоздку!
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Как получить доступ к...

Сообщение r3verser »

У тебя либо кривой релейшен либо кривая структура бд. Генерь через gii.
УютныйЧайник
Сообщения: 7
Зарегистрирован: 2014.10.22, 18:52

Re: Как получить доступ к...

Сообщение УютныйЧайник »

Дело было в конфликте имен. Попробовал gii. Он вместо getExpansion() сгенерил getExpansion0(). С нулем все заработало как надо. В итоге я просто переименовал поле expansion в таблице server на expansion_id.
Спасибо всем пытающимся помочь. Вопрос снят.
Ответить