获取不同的列并返回过滤后的结果

时间:2019-11-14 01:49:40

标签: php mysql laravel eloquent

目前,我希望在网站的首页上显示一些假期类别。

为了创建这些类别,我需要从现有的假日中抽出一组独特的国家/地区。

例如;一个假期可能去墨西哥,另外三个可能去泰国,另一个可能去印度。

请注意,去泰国度假的3个假期基本都归还了;但我只需要其中一个即可创建类别。因此它们必须与众不同。

这是我当前的代码。

 public function getHolidays($mode = "all", $limit = 1000){
    $holidays = Holiday::whereHas('dates', function(Builder $q){
        $q->where('start_sydney', '>=', date('Y-m-d'));
    });
    switch($mode){
        case "home":
            $holidays = $holidays->whereHas('info', function($q) {

            });
        break;
    }
    $holidays = $holidays
        ->with('dates')
        ->with('pricing')
        ->with('info')
        ->with('images')
        ->with('images.image_info')
        ->limit($limit)->get();
    return json_encode($holidays);
}

在家庭情况下,我尝试使用$ q-> distinct('country'),但没有用。

需要使用“信息”模型中的国家/地区列,但我不确定如何使其唯一。

有人可以帮助我根据信息模型中“国家”列返回唯一的记录集吗?

2 个答案:

答案 0 :(得分:1)

尝试通过加入并使用groupby进行操作

switch($mode){
        case "home":
            $holidays = $holidays->join('info', 'info.id', '=', 'holidays.id')->groupBy('info.country');
        break;
    }

答案 1 :(得分:1)

Laravel查询生成器/雄辩的人经常会误解的一件事是distinct。您不能将任何东西传递给distinct,因为它不带任何参数。

也就是说,我不完全知道您如何设置模型,但是假设它们有些标准,则可以从本质上尝试您尝试的方法,但是相反:

Info::select('country')->has('holiday')->distinct()->pluck('country');

应该返回您想要的东西。

我在这里使用pluck是因为它会返回一个漂亮,简单,随时可用的国家名称集合,供您在前端使用。

有几种方法可以做您想做的事情,这就是其中一种。希望对您有帮助!


有关与文档不同的更多信息:

  

distinct方法可让您强制查询返回distinct   结果:

$users = DB::table('users')->distinct()->get();