一段时间以来,我一直试图弄清楚如何以自己的口才(收藏吗?)实现自定义订单: 这是我的集合(注意,我没有使用-> 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(),但我不知道这是什么,我也没有真正找到有用的东西)
答案 0 :(得分:2)
关于这段代码。
$ads1 = Ad::where('ad_type',1);
$ads2 = Ad::where('ad_type',2);
$mergedAds = $ads1->merge($ads2);
$ ads1和$ ads2称为两个查询,尚未得到实际结果。要获得实际结果:
$ads1 = Ad::where('ad_type',1)->get();
$ads2 = Ad::where('ad_type',2)->get();
$mergedAds = $ads1->merge($ads2);
我假设您要按广告类型按2、3、1的顺序对广告进行排序。我点击了以下链接:
How to define a custom ORDER BY order in mySQL
因此在Laravel中,这可能有效:
$ads = Ad::sortByRaw("FIELD(Language, 2, 3, 1)")->get();