我已经连续几个小时没有成功了。
我有一个产品表,我需要从最畅销/评价最高/最受欢迎产品的列表(100个,来自示例)中提取N个随机产品。
使用原始查询这似乎是微不足道的。首先,我们采取100个高价产品,然后我们重新排序,最后采取其中3个。
select * from (select * from `products` order by `valoration` desc limit 100) as products order by RAND() limit 3;
这可以使用DB:table来完成,但我需要使用原始查询来执行相同的查询。这是因为我的Product模型有许多自定义方法,DB:table返回stdObjects列表而不是Product模型集合。
如果没有原始查询,怎么办呢?
感谢。
答案 0 :(得分:2)
通过内存,您可以使用Illuminate \ Support \ Collection方法获取所需内容。
$selectedProducts = Product::orderBy('valoration')->take(100)->get()->random(3);
答案 1 :(得分:0)
要从原始查询中获取模型对象的集合,您可以使用hydrateRaw()
$products = Product::hydrateRaw("
select * from (
select * from `products` order by `valoration` desc limit 100
) as products
order by RAND() limit 3
");
hydrateRaw(string $query, array $bindings = array(), string|null $connection = null)
从原始查询创建模型集合。
(API)