From 4ee662a0aea1f1720cdcb5af5a81e0a38b6654ec Mon Sep 17 00:00:00 2001 From: Abdul Kareem Date: Thu, 19 Feb 2026 15:55:13 +0300 Subject: [PATCH] Support owner_user_id schema for venues and vendor queries --- .../Controllers/Api/ReservationController.php | 6 ++-- app/Http/Controllers/Api/VenueController.php | 9 ++++-- app/Models/User.php | 2 +- app/Models/Venue.php | 29 ++++++++++++++++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Api/ReservationController.php b/app/Http/Controllers/Api/ReservationController.php index a794ad4..cdebe26 100644 --- a/app/Http/Controllers/Api/ReservationController.php +++ b/app/Http/Controllers/Api/ReservationController.php @@ -30,7 +30,7 @@ class ReservationController extends Controller $query = Reservation::query() ->whereHas('venue', function ($q) use ($request) { - $q->where('vendor_id', $request->user()->id); + $q->where(Venue::ownerColumn(), $request->user()->id); }) ->with([ 'venue:id,name,type,address_text', @@ -86,7 +86,7 @@ class ReservationController extends Controller $reservation = Reservation::query() ->where('id', $id) ->whereHas('venue', function ($q) use ($request) { - $q->where('vendor_id', $request->user()->id); + $q->where(Venue::ownerColumn(), $request->user()->id); }) ->lockForUpdate() ->first(); @@ -225,7 +225,7 @@ class ReservationController extends Controller { return Reservation::query() ->whereHas('venue', function ($q) use ($request) { - $q->where('vendor_id', $request->user()->id); + $q->where(Venue::ownerColumn(), $request->user()->id); }) ->find($id); } diff --git a/app/Http/Controllers/Api/VenueController.php b/app/Http/Controllers/Api/VenueController.php index 77ba399..4033dc1 100644 --- a/app/Http/Controllers/Api/VenueController.php +++ b/app/Http/Controllers/Api/VenueController.php @@ -90,6 +90,7 @@ class VenueController extends Controller public function store(Request $request) { $user = $request->user(); + $ownerColumn = Venue::ownerColumn(); $validated = $request->validate([ 'name' => 'required|string|max:255', @@ -111,7 +112,7 @@ class VenueController extends Controller ]); $venue = Venue::create([ - 'vendor_id' => $user->id, + $ownerColumn => $user->id, 'name' => $validated['name'], 'type' => $validated['type'], 'description' => $validated['description'] ?? null, @@ -134,6 +135,7 @@ class VenueController extends Controller // LIST VENUES (admin) public function adminIndex(Request $request) { + $ownerColumn = Venue::ownerColumn(); $validated = $request->validate([ 'search' => 'nullable|string|max:255', 'per_page' => 'nullable|integer|min:1|max:100', @@ -142,7 +144,7 @@ class VenueController extends Controller $query = Venue::query() ->select([ 'id', - 'vendor_id', + DB::raw($ownerColumn . ' as vendor_id'), 'name', 'type', 'description', @@ -240,11 +242,12 @@ class VenueController extends Controller $venue = null; DB::transaction(function () use ($validated, $vendorId, &$venue, $request) { + $ownerColumn = Venue::ownerColumn(); $imageUrls = $validated['image_urls'] ?? []; $imageUrls = $this->appendUploadedImages($request, $imageUrls); $venue = Venue::create([ - 'vendor_id' => $vendorId, + $ownerColumn => $vendorId, 'name' => $validated['name'], 'type' => $validated['type'], 'description' => $validated['description'] ?? null, diff --git a/app/Models/User.php b/app/Models/User.php index a4d3c3c..9baf853 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -66,7 +66,7 @@ class User extends Authenticatable public function venues() { - return $this->hasMany(Venue::class, 'vendor_id'); + return $this->hasMany(Venue::class, Venue::ownerColumn()); } public function reservations() diff --git a/app/Models/Venue.php b/app/Models/Venue.php index b0581d3..cd9a0d5 100644 --- a/app/Models/Venue.php +++ b/app/Models/Venue.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Support\Facades\Schema; use App\Models\Reservation; use App\Models\SeatingArea; use App\Models\VenueTable; @@ -11,9 +12,11 @@ use App\Models\VenueTable; class Venue extends Model { use HasFactory; + protected static ?string $resolvedOwnerColumn = null; protected $fillable = [ 'vendor_id', + 'owner_user_id', 'name', 'type', 'description', @@ -34,9 +37,33 @@ class Venue extends Model 'offers' => 'array', ]; + public static function ownerColumn(): string + { + if (self::$resolvedOwnerColumn !== null) { + return self::$resolvedOwnerColumn; + } + + self::$resolvedOwnerColumn = Schema::hasColumn('venues', 'vendor_id') + ? 'vendor_id' + : 'owner_user_id'; + + return self::$resolvedOwnerColumn; + } + + public function setVendorIdAttribute($value): void + { + $this->attributes[self::ownerColumn()] = $value; + } + + public function getVendorIdAttribute() + { + $column = self::ownerColumn(); + return $this->attributes[$column] ?? null; + } + public function vendor() { - return $this->belongsTo(User::class, 'vendor_id'); + return $this->belongsTo(User::class, self::ownerColumn()); } public function reservations()