Как заменить декоратор во время выполнения?

Вы пытаетесь называть AlbumxUserImage() на Collection моделях, а не на каждой отдельной модели.

AlbumxUserImage::all() возвращает Collection моделей, о которых вы можете думать как массив. Вам нужно перебирать коллекцию и вызывать AlbumxUserImage() для каждой модели в коллекции.

Это может решить вашу проблему на данный момент, но вы, похоже, не понимаете, как отношения «многие ко многим» работают в Laravel.

Как вы должны делать много-ко-многим

Я не знаю, почему у вас есть модель для вашей сводной таблицы. Это не так, как Laravel обычно обрабатывает модели с отношениями «многие ко многим». Типичные отношения «многие ко многим» с вашими таблицами выглядят следующим образом:

Модели:

class Album extends Model {
    protected $table = 'album';
    protected $primaryKey = 'album_id';

    public function images() {
        return $this->belongsToMany('App\UserImage', 'albumxuser_image','album_id','user_image_id');
    }
}

class UserImage extends Model {
    protected $table = 'user_image';
    protected $primaryKey = 'user_image_id';

    public function albums() {
        return $this->belongsToMany('App\Album', 'albumxuser_image','user_image_id','album_id');
    }
}

Использование:

// Get all album names through UserImage
$userImages = UserImage::all();
foreach ($userImages as $userImage) {
    foreach ($userImage->albums as $album) {
        echo $album->name;
    }
}

// Get all images through Album
$albums = Album::all();
foreach ($albums as $album) {
    foreach ($album->images as $image) {
        echo $image->value;
    }
}

0
задан Chuck 31 March 2019 в 23:53
поделиться