app/Http/Controllers/Api/ProductsController.php (49 lines of code) (raw):
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\OrderLines;
use App\Models\Products;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ProductsController extends Controller
{
public function products(): Collection
{
return Products::all();
}
public function product($id): Products|Collection
{
return Products::findOrFail($id);
}
public function customers($id): Collection
{
$customers = OrderLines::select()
->leftJoin('orders', 'order_lines.order_id', '=', 'orders.id')
->leftJoin('customers', 'orders.customer_id', '=', 'customers.id')
->where('order_lines.product_id', $id)
->get();
return $customers;
}
public function top(): array
{
$topProducts = DB::select("
SELECT products.id as id, products.sku as sku, products.name as name, products.stock as stock, sum(order_lines.amount) as sold
FROM order_lines
LEFT JOIN products
ON order_lines.product_id = products.id
GROUP BY products.id order by sold desc
");
return $topProducts;
}
public function create(Request $request)
{
return Products::create($request->all());
}
public function update(Request $request, $id)
{
$product = Products::findOrFail($id);
$product->updateOrFail($request->all());
return $product;
}
}