Сводные столбцы скрыты в модели Laravel

У меня есть модель Post с отношением:

public function prices() {
    return $this->morphedByMany('App\Price', 'postable');
}

У меня есть отдельная таблица postables со столбцами:

- postable_id
- postable_type
- custom (type: json)

Почему, когда я хочу сделать: $post->pivot->custom я получаю ноль, почему? Когда я делаю dd($post) столбец custom не найден в коллекции.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
831
1

Ответы 1

Вы должны указать пользовательские атрибуты при определении отношения, например:

public function prices() {
    return $this->morphedByMany('App\Price', 'postable')->withPivot('custom');
}

Если вы хотите применить пользовательский атрибут, вам нужно будет создать модель для сводной таблицы, например:

use Illuminate\Database\Eloquent\Relations\Pivot;

class Postable extends Pivot
{
    protected $casts = [
        'custom' => 'array',
    ];
}

Ссылайтесь на эту модель в определении вашего отношения:

return $this->morphedByMany('App\Price', 'postable')
    ->using('App\Postable')
    ->withPivot('custom');

Теперь вы можете получить значение следующим образом:

foreach ($post->prices as $price) {
    echo $price->pivot->custom;
}

Спасибо. Но вы не знаете, как я могу написать столбец custom в слепках? Могу ли я сделать это в моей модели Post или нет?

Dronax 20.03.2019 14:52

Вы должны создать модель для сводной таблицы: laravel.com/docs/5.8/…

piscator 20.03.2019 14:53

Большое спасибо :)

Dronax 20.03.2019 14:53

Извиняюсь. Но почему мы не можем написать withPivot в pivotModel? Пример: protected $withPivot = ['custom'] это не работает.

Dronax 20.03.2019 15:03

Вы должны указать это в отношении. Подробный пример см. в обновленном ответе.

piscator 20.03.2019 15:09

Но почему мы не можем добавить сводную колонку глобально? Мне нужно в каждом отношении писать: withPivot('custom')

Dronax 20.03.2019 15:14

Только в определениях вашей модели, так всего два раза.

piscator 20.03.2019 15:23

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