目前,我希望在网站的首页上显示一些假期类别。
为了创建这些类别,我需要从现有的假日中抽出一组独特的国家/地区。
例如;一个假期可能去墨西哥,另外三个可能去泰国,另一个可能去印度。
请注意,去泰国度假的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'),但没有用。
需要使用“信息”模型中的国家/地区列,但我不确定如何使其唯一。
有人可以帮助我根据信息模型中“国家”列返回唯一的记录集吗?
答案 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();