Доступ к связанной модели внутри мутатора

У меня есть вопрос по поводу моей проблемы, позвольте мне объяснить ..

У меня есть эта модель, которая является Продукт и ProductVariant, ProductVariant имеет отношение «ownTo» в модели продукта .. и модель продукта имеет отношение «hasMany» в ProductVariant

Мой вопрос ...

я создал много вариантов, отличных от продукта, который похож на

Product->variant()->create($variantProducts);

и я хотел бы создать какой-нибудь мутатор в модели ProductVariant для управления одним столбцом под названием «sku».

Моя проблема в том, как получить значение столбца из мутатора, чтобы получить данные из связанной модели (продукта), в этом случае я хочу получить category_id продукта из мутатора ProductVariant

я пытаюсь сделать это, но похоже не работает

public function setSkuAttribut($v){
    // product() is belongsTo relation to the product model
    $cat = $this->product()->category_id;
    dd($cat);
}

но он возвращает мне эту ошибку

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$category_id

Любая помощь будет очень признательна .. спасибо :)

У вас по-прежнему появляется ошибка, если вы снимаете скобки? $cat = $this->product->category_id

Djave 26.07.2018 13:32

все еще есть ошибка, теперь ошибка пытается получить свойство не-объекта

Wawan Brutalx 26.07.2018 13:55

Это может быть глупо, но уверены ли вы, что к $this прикреплен продукт? Если у вас dd($this->product), вы получите объект?

Djave 26.07.2018 15:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
3
111
1

Ответы 1

Вы вызываете метод отношения product() как метод, что означает, что вы получаете экземпляр Builder. Чтобы получить экземпляр модели, вам придется либо выполнить ->product()->get()->category_id, который будет делать новый запрос в каждом случае, либо использовать ленивую загрузку с ->product->category_id, которая будет использовать уже загруженный экземпляр отношения, если он есть.

Другие вопросы по теме