October cms (laravel) где запрос

У меня проблема с запросом фильтра. Мне нужно что-то вроде

select painting from artist_painting where type=$_GET['type'] AND material=$_GET['material'] and artist_slug =$_GET['artist_slug'] ORDER BY painting DESC

У меня есть сводная таблица artist_painting и artist. "artist_slug" находится в таблице "исполнители"

я делаю

$this['painting'] = Painting::whereHas('artist', function($q)
    {
         $q->where('artist_slug', '=', $this->param('slug'));
    })->get();

но я не знаю, что делать дальше. Как я могу сделать запрос в PHP-коде?

Вы определили отношения между моделями?

Chirag Patel 02.05.2018 09:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
1
639
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы решил эту задачу с точки зрения Художника:

$artist = Artists::where('artist_slug', $this->param('slug'))->with('paintings')->first();

Доступ ко всем картинам художника можно получить с помощью $artist->paintings, который будет Collection.

Ответ принят как подходящий

Коротко и грязно:

Painting::where('type',input("type"))
->where('material',input("material"))
->whereHas('artist', function($q)
    {
         $q->where('artist_slug', '=', $this->param('slug'));
    })->get();

Объяснение:

Когда вы инициализируете запрос, возвращается экземпляр построителя запросов. По сути, все методы в построителе запросов возвращают один и тот же экземпляр, поэтому вы можете последовательно объединить их в один запрос. Но вы также можете просто поработать над построителем запросов.

$query = Painting::where('type',input("type"));

или же:

$query = $model->newQuery()// Where model is an intance of painting, for example new Painting();

Затем вы можете просто поработать над экземпляром построителя запросов, передать его другим методам, которые могут что-то делать.

function getPaintings($type, $material, $slug) 
{
     $query = Painting::where('type',$type);    
     $query->where('material', $material);
     $this->findArtistBySlug($query, $slug);
     return $query->get()
}

function findArtistBySlug($query, $slug) 
{
    $query->whereHas('artist', function($q) use ($slug)
    {
         $q->where('artist_slug', '=', $slug);
    });
    $query->with(['artist']);
}

Вы можете прочитать https://octobercms.com/docs/database/query и https://laravel.com/docs/5.6/queries

Другие вопросы по теме