我有一个代码:
$orders = Order::all();
$allorders = $orders->count();
$deliveryQuery = $orders->where('status', '=', '8')->select(DB::raw('AVG(updated_at) as order_average'))->first();
我收到错误:
Method select does not exist.
我该如何解决?我的代码正在工作,如果我这样做:
$deliveryQuery = Order::where('status', '=', '8')->select(DB::raw('AVG(updated_at) as order_average'))->first();
但这不好,我想要 1 个查询,但不是 2..
更新:
$orders->where('status', '=', '8')->avg('updated_at')->first();
我可以使用此代码吗?但它不起作用..获取错误:
Object of class IlluminateSupportCarbon could not be converted to int
all(( 方法返回一个集合。然后,您可以对结果使用集合方法,但 where(( 和 select(( 是 QueryBuilder 类的方法。
$query = Order::query(); // You can get the query builder this way.
$orders = Order::all(); // equivalent to $query->get(); => return a Collection
$orderCount = Order::count(); // equivalent to $query->count();
$orderCount = $orders->count(); // here $orders is a Collection and the count() method is from the Collection class
当你调用 avg(( 时,你从 Collection 类调用它。但它只能对数字起作用,并且updated_at属性被 Laravel 解析为碳日期。
您的代码可能是:
$query = Order::query();
$orders = $query->get();
$allorders = $query->count();
$deliveryQuery = $query->where('status', '=', '8')->select(DB::raw('AVG(updated_at) as order_average'))->first();
试试这个。
$query = Order::query();
$orders = clone $query;
$orders = $orders->all();
$allorders = $orders->count();
$deliveryQuery = $query->where('status', '=', '8')->select(DB::raw('AVG(updated_at) as order_average'))->first();
类似的问题可以在这里找到