october cms(laravel)查询

时间:2018-05-02 06:55:14

标签: laravel octobercms

我对过滤器查询有一些问题。我需要做一些像

这样的想法

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_slug'位于'艺术家'表中

我做

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

但我不知道接下来该做什么。 我怎样才能在php代码中查询?

2 个答案:

答案 0 :(得分:0)

我会从艺术家的角度解决这个问题:

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

可以使用$artist->paintings访问艺术家的所有绘画,这将是Collection

答案 1 :(得分:0)

短而脏:

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/queryhttps://laravel.com/docs/5.6/queries