# Booking system ala airbnb many to many laravel relationship? [closed]

I'm trying to create a system to log all bookings for a few airbnb hosts, at first I had two models Home and Guest, where a home can have many guests and a guest could book for many homes,

then I thought about creating a guest_home pivot table to link both tables... then things got complicated in my head, what about a Booking model, and (have that booking model act as a pivot table ?) , to me doing new Booking() seemed better than attaching ids to home model?

I thought of doing something like this in my BookingController:

public function createBooking(Request $request) {$guestIds = Guest::latest()->take(3)->pluck('id');
$home = Home::findOrFail($request->input('home_id', 2));

$booking = new Booking();$booking->home_id = $home->id;$booking->guests()->attach($guestIds);$booking->save();

return response()->json([
'booking' => $booking, ]); }  Should I create home_guest pivot table, is a pivot table even needed? what models would I link, please bear with me, so far this is what I got: Models class Guest extends Model { public function bookings() { return$this->belongsToMany('App\Models\Home', 'bookings', 'guest_id', 'home_id');
}

}

class Home extends Model
{

public function guests()
{
return $this->belongsToMany('App\Models\Guest', 'bookings', 'home_id', 'guest_id'); } public function bookings() { return$this->hasMany('App\Models\Booking');
}

}

class Booking extends Model
{
//Is Booking needed or I could make a pivot table like home_guest called 'bookings' ?
public function guests()
{
return $this->belongsToMany('App\Models\Guest', 'booking_guest', 'booking_id', 'guest_id'); } }  Migrations: Schema::create('bookings', function (Blueprint$table) {
$table->increments('id');$table->unsignedInteger('home_id')->index();
$table->foreign('home_id')->references('id')->on('homes')->onDelete('cascade')->onUpdate('cascade');$table->unsignedInteger('guest_id')->nullable()->index();
$table->foreign('guest_id')->references('id')->on('guests')->onDelete('cascade')->onUpdate('cascade');$table->timestamps();
});

Schema::create('homes', function (Blueprint $table) {$table->increments('id');
$table->unsignedInteger('host_id')->index();$table->foreign('host_id')->references('id')->on('hosts')->onDelete('cascade')->onUpdate('cascade');
$table->string('fullAddress')->unique();$table->integer('rooms')->unique();
$table->timestamps(); }); Schema::create('guests', function (Blueprint$table) {
$table->increments('id');$table->string('fullName')->unique();
$table->string('identificationType')->unique();$table->text('country')->nullable();
\$table->timestamps();
});
$$$$
`
• Please clarify whether the current code works the way it should or not. Your question is quite unclear. – Mast Jul 20 '20 at 6:18