Объясните ситуацию по связям

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Объясните ситуацию по связям

Сообщение Йож »

Добрый день!
Возник такой, казалось бы легкий вопрос, но никак не могу врубиться, почему так происходит.

Product.php

Код: Выделить всё

public function getProductAttachments()
    {
        return $this->hasMany(ProductAttachment::className(), ['product_id' => 'id']);
    }
ProductAttachment.php

Код: Выделить всё

public function getUrl()
    {
        if ($this->base_url && $this->path) {
            return $this->base_url . '/' . $this->path;
        } else {
            return false;
        }
    }
В итоге код:

Код: Выделить всё

$items = \common\models\Product::find()->all();
        foreach ($items as $item) {
            $images = $item->getProductAttachments();
            foreach ($images as $image) {
                $url = $image->getUrl();
            }
        }
Выдает ошибку:

Код: Выделить всё

Call to a member function getUrl() on null
Меня смущает содержание каждок $image

Код: Выделить всё

Array
(
)
common\models\ProductAttachment
1
common\models\Product Object
(

и так далее.

Где я косячу?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Объясните ситуацию по связям

Сообщение ElisDN »

Код: Выделить всё

$images = $item->productAttachments;
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Объясните ситуацию по связям

Сообщение Йож »

Спасибо.
Надо было документацию сначала нормально покурить :roll:
А то мне что-то эти "магические методы" PHP все в голове перемешали :)
Однако метод получения связных данных возвращает объект yii\db\ActiveQuery, в то время как доступ к свойству связи возвращает объект yii\db\ActiveRecord или массив таких объектов. `php $customer->orders; // массив объектов Order $customer->getOrders(); // объект ActiveQuery ` Это полезно при тонкой настройке запросов к связным данным, что будет описано в следующем разделе.
Ответить