Как использовать Eloquent для извлечения определенных типов файлов из таблицы файлов? - PullRequest
0 голосов
/ 11 февраля 2020

Учитывая, что у продукта есть изображения, видео и PDF-файлы ... на сайте электронной коммерции.

Я хотел бы иметь возможность вызвать красноречивый вызов в зависимости от типа файла, например:

Изображения:
$ product-> file-> images ()
Предоставит великолепную коллекцию изображений для продукта ...

Видео:
$ product-> file-> videos ()
Предоставит великолепную коллекцию видео для продукта ...

PDF:
$ product-> file-> pdf ()
Предоставит красноречивую коллекцию pdf для продукта ...

Files Table

Пока у меня есть только Product. php (модель):

    /**
     * The relationships that should always be loaded.
     *
     * @var array
     */
    protected $with = ['file'];

    public function file()
    {
        return $this->hasMany(File::class, 'file_refer_id', 'id');
    } 

и файл . php (модель):

    public function product()
    {
        return $this->belongsTo(Product::class, 'file_refer_id', 'id');
    }

Содержит соответствующие отношения между продуктом и файлом.

Как лучше всего написать функцию в файле. php (модель) отфильтровать товары по типу файла?

1 Ответ

2 голосов
/ 11 февраля 2020

Поскольку это отношение «один ко многим» между продуктом и файлом, давайте переименуем отношение к файлам ().

Это может привести к вашим результатам:

class Product extends Model
{
    public function files()
    {
        return $this->hasMany(File::class, 'file_refer_id', 'id');
    } 

    public function images()
    {
        return $this->files()->where('type', 1);
    }

    public function videos()
    {
        return $this->files()->where('type', 2);
    } 

    public function pdfs()
    {
        return $this->files()->where('type', 3);
    } 
}

Таким образом, вы можете получить $ видео, PDF и изображения, говоря:

$product->videos;

$product->pdfs;

$product->images;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...