【问题标题】:october cms (laravel) where query十月 cms (laravel) where 查询
【发布时间】:2018-05-02 06:55:13
【问题描述】:

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

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 代码中进行查询?

【问题讨论】:

  • 你定义了模型之间的关系吗?

标签: laravel octobercms


【解决方案1】:

又短又脏:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2017-05-31
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多