@photosho

Как узнать тип объекта в полиморфической связи?

Здравствуйте. Имеется таблица "images" с изображениями, связанная полиморфической связью (morphTo) с несколькими типами материалов. Изображения для каждого типа хранятся на сервере в разных папках, а в таблице с изображениями записаны не полные пути, но только имена изображений. Путь к файлу строится в следующей функции:

public function getNameAttribute($name) {
    Здесь имя изображения преобразуется в адрес
}


Можно ли как-то внутри этой функции определить тип материала, которому присвоено изображение для генерации соответствующего ему пути?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
К примеру, модель ваших картинок:
class Image extends Model
{
    public function imageable()
    {
        return $this->morphTo();
    }
}


И какой-то пост с картинками:
class Post extends Model
{
    public function images()
    {
        return $this->morphMany('App\Image', 'imageable');
    }
}


В таком случае в таблице связей тип ссылаемого объекта (скажем, App\Post) будет в ячейке imageable_type.

В данный момент не могу проверить, но логично предположить, что такая связка - то, что вам нужно:
class Post extends Model
{
    public function images()
    {
        return $this->morphMany('App\Image', 'imageable')->withPivot('imageable_type');
    }
}


public function getNameAttribute() {
    switch($this->pivot->imageable_type){
        case 'App\Post':
            // что вы хотите сделать с $this->name если тип - App\Post
        break;
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы