У меня есть модель Post с отношением:
public function prices() {
return $this->morphedByMany('App\Price', 'postable');
}
У меня есть отдельная таблица postables со столбцами:
- postable_id
- postable_type
- custom (type: json)
Почему, когда я хочу сделать: $post->pivot->custom я получаю ноль, почему? Когда я делаю dd($post) столбец custom не найден в коллекции.






Вы должны указать пользовательские атрибуты при определении отношения, например:
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;
}
Вы должны создать модель для сводной таблицы: laravel.com/docs/5.8/…
Большое спасибо :)
Извиняюсь. Но почему мы не можем написать withPivot в pivotModel? Пример: protected $withPivot = ['custom'] это не работает.
Вы должны указать это в отношении. Подробный пример см. в обновленном ответе.
Но почему мы не можем добавить сводную колонку глобально? Мне нужно в каждом отношении писать: withPivot('custom')
Только в определениях вашей модели, так всего два раза.
Спасибо. Но вы не знаете, как я могу написать столбец
customв слепках? Могу ли я сделать это в моей модели Post или нет?