Laravel定制的Eloquent订购

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (33)

有一段时间我一直试图弄清楚如何在我的口才(集合?)中实现自定义顺序:这是我的集合(注意我没有使用 - > get(),因为在函数的后半部分,即时通讯使用它来扩展查询/集合)

$ads = Ad::whereIn('ad_type',[2,3,1]); <-- This is my Desired Output as well.

我的广告表中有多个元素与每个ad_type。

所以我尝试过:

$ads1 = Ad::where('ad_type',1);
$ads2 = Ad::where('ad_type',2);
$mergedAds = $ads1->merge($ads2);

但我得到:

'Call to undefined method Illuminate\Database\Query\Builder::merge()'

接下来我试着保留$ ads1,并添加:

            $ads2 = sortBy(function($ads) use ($ad_types) {
            return array_search($ads->getKey(), $ad_types);
        });

但是,它不是一个数组,所以这不能工作。谁能让我朝着正确的方向前进?也许可以解释Collection,Eloquent Collection和Query之间的区别是什么,所以我可以更好地理解这一点。非常感谢你提前。(为什么我问这个问题:我看过人们在做collect()或者新的Collection(),我不知道这是什么,我也没有发现任何有用的东西)

提问于
用户回答回答于

关于这段代码。

$ads1 = Ad::where('ad_type',1);
$ads2 = Ad::where('ad_type',2);
$mergedAds = $ads1->merge($ads2);

$ ads1和$ ads2被称为两个QUERIES,而不是实际结果。要获得实际结果:

$ads1 = Ad::where('ad_type',1)->get();
$ads2 = Ad::where('ad_type',2)->get();
$mergedAds = $ads1->merge($ads2);

我假设您要按广告类型按2,3,1的顺序对广告进行排序。我来到这个链接:

如何在mySQL中定义自定义ORDER BY顺序

所以在Laravel中,这可能会起作用:

    $ads = Ad::sortByRaw("FIELD(Language, 2, 3, 1)")->get();

扫码关注云+社区

领取腾讯云代金券