У меня есть таблица Gallery
, в которой используются полиморфные отношения, поэтому я могу добавить Images
и Videos
в список моих галерей.Laravel: Полиморфные отношения + Аксессуар
В таблице Gallery
у меня есть столбец galleryable_type
, который заполнен либо App\Video
, либо App\Image
.
Есть ли способ для меня, чтобы использовать аксессор (DOCS here), чтобы изменить значение galleryable_type
к любому video
или image
, так что я могу использовать этот столбец в JS, чтобы решить, какой тип галереи пункта я имею дело с?
Я попытался следующий:
/**
* Get and convert the makeable type.
*
* @param string $value
* @return string
*/
public function getMakeableTypeAttribute($value)
{
return str_replace('app\\', '', strtolower($value));
}
Но я в конечном итоге со следующей ошибкой:
FatalErrorException in Model.php line 838:
Class '' not found
Я предполагаю, что должно делать с аксессором обрабатывается до полиморфного но я не уверен.
я могу просто использовать следующий в моем контроллере:
foreach (Gallery::with('galleryable')->get() as &$gallery) {
$gallery->galleryable_type = str_replace('app\\', '', strtolower($gallery->galleryable_type));
}
Но это похоже на хитроумный способ делать вещи. Может ли Гуру Ларавела пролить свет на лучший способ решить эту проблему?
Спасибо!
Awesome, спасибо за информацию! –
Примечание: в Laravel 5.3 вы должны использовать [morphMap] (https://www.laravel.com/docs/5.3/eloquent-relationships#polymorphic-relations). – tyteen4a03
Да, это правда в L5.3, у нас есть morphMap, однако этот ответ был до реала. Я вернусь к записи. –