十月 cms (laravel) where 查询
october cms (laravel) where query
我在过滤查询方面遇到了一些问题。我需要做一些像
这样的事情
select painting from artist_painting where type=$_GET['type'] AND material=$_GET['material'] and artist_slug =$_GET['artist_slug'] ORDER BY painting DESC
我有一个枢轴 table artist_painting 和艺术家。 'artist_slug' 在 'artist' table
我愿意
$this['painting'] = Painting::whereHas('artist', function($q)
{
$q->where('artist_slug', '=', $this->param('slug'));
})->get();
但我不知道下一步该做什么。
我如何在 php 代码中进行查询?
我会站在美工的角度来解决这个问题:
$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();
解释:
当您初始化一个查询时,一个查询生成器实例被 returned。基本上,查询生成器上的所有方法 return 都是同一个实例,因此您可以将它们菊花链式链接到一个查询中。
但您也可以只使用查询生成器。
$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
我在过滤查询方面遇到了一些问题。我需要做一些像
这样的事情select painting from artist_painting where type=$_GET['type'] AND material=$_GET['material'] and artist_slug =$_GET['artist_slug'] ORDER BY painting DESC
我有一个枢轴 table artist_painting 和艺术家。 'artist_slug' 在 'artist' table
我愿意
$this['painting'] = Painting::whereHas('artist', function($q)
{
$q->where('artist_slug', '=', $this->param('slug'));
})->get();
但我不知道下一步该做什么。 我如何在 php 代码中进行查询?
我会站在美工的角度来解决这个问题:
$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();
解释:
当您初始化一个查询时,一个查询生成器实例被 returned。基本上,查询生成器上的所有方法 return 都是同一个实例,因此您可以将它们菊花链式链接到一个查询中。
但您也可以只使用查询生成器。
$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