| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/clients/client2/c.pacim.de/web/app/Models/ |
Upload File : |
<?php
declare(strict_types=1);
namespace App\Models;
use App\Database;
use PDO;
final class Cruise
{
private PDO $db;
public function __construct()
{
$this->db = Database::connection();
}
public function list(): array
{
$sql = "SELECT cr.*, s.name AS ship_name,
SUM(CASE WHEN p.type='indoor' THEN 1 ELSE 0 END) AS booked_indoor,
SUM(CASE WHEN p.type='outdoor' THEN 1 ELSE 0 END) AS booked_outdoor,
SUM(CASE WHEN p.type='valet' THEN 1 ELSE 0 END) AS booked_valet,
SUM(CASE WHEN p.type='camper' THEN 1 ELSE 0 END) AS booked_camper
FROM cruises cr
LEFT JOIN ships s ON s.id = cr.ship_id
LEFT JOIN bookings b ON b.cruise_id = cr.id
LEFT JOIN products p ON p.id = b.parking_product_id
GROUP BY cr.id
ORDER BY cr.start_date DESC";
return $this->db->query($sql)->fetchAll();
}
public function find(int $id): ?array
{
$stmt = $this->db->prepare('SELECT * FROM cruises WHERE id = :id');
$stmt->execute(['id' => $id]);
return $stmt->fetch() ?: null;
}
public function getCapacityStats(int $id): array
{
$stmt = $this->db->prepare("SELECT p.type, COUNT(*) AS booked
FROM bookings b
LEFT JOIN products p ON p.id = b.parking_product_id
WHERE b.cruise_id = :id
GROUP BY p.type");
$stmt->execute(['id' => $id]);
return $stmt->fetchAll();
}
}