октябрь cms (laravel) где запрос - PullRequest
0 голосов
/ 02 мая 2018

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

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' находится в таблице 'artist'

Я делаю

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

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

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

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

0 голосов
/ 02 мая 2018

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

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

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

...