Hi Dear Friends,
In this post We would like to share infinity knowladge My Good experience and Best solution For .
Try this it will help you and for more information click here: Laravel Examples.
We hope it can help you...
In this post We would like to share infinity knowladge My Good experience and Best solution For .
Laravel Examples
Polymorphic Many to Many Relationship
Demo details:
In this demo we have 3 models (Valet, Owner and Car), and 4 tables (valets, owners, cars and drivers).
Business Rules:
The Valet (driver) can drive many Cars.
The Owner (driver) can drive many Cars.
The Car can be driven by many drivers (Valet or/and Owner).
The Owner (driver) can drive many Cars.
The Car can be driven by many drivers (Valet or/and Owner).
Relations Diagram:
Relationship Details:
The Pivot table “drivers” should store the Driver ID, Driver Type and the CarID.
“driver” is a name given to a group of models (Valet and Owner). And it’s not limited to two. The driver type is the real name of the model.
“driver” is a name given to a group of models (Valet and Owner). And it’s not limited to two. The driver type is the real name of the model.
Eloquent Models:
class Valet { public function cars() { return $this->morphToMany(Car::class, 'driver'); } }
class Owner { public function cars() { return $this->morphToMany(Car::class, 'driver'); } }
class Car { public function valets() { return $this->morphedByMany(Valet::class, 'driver'); } public function owners() { return $this->morphedByMany(Owner::class, 'driver'); } }
Database Migrations:
Schema::create('valets', function (Blueprint $table) { $table->increments('id'); $table->string('name'); });
Schema::create('owners', function (Blueprint $table) { $table->increments('id'); $table->string('name'); });
Schema::create('drivers', function (Blueprint $table) { $table->increments('id');
$table->integer('driver_id')->unsigned()->index(); $table->string('driver_type'); // or use $table->morphs(‘driver’); instead of "driver_id" and "driver_type"
$table->integer('car_id')->unsigned()->index(); $table->foreign('car_id')->references('id')->on('cars')->onDelete('cascade'); });
Store Records:
// Create relation between driver (Valet/Owner) and Car.
$valet->cars()->saveMany([$car1, $car2]); $owner->cars()->saveMany([$car1, $car2]);
// Or use the save() function for single model.
$valet->cars()->save($car1); $owner->cars()->save($car1);
// Create relation between Car and driver (Valet/Owner).
$car->valets()->attach([ $valet1->id, $valet2->id, ]);
$car->owners()->attach([ $owner1->id, $owner2->id, ]);
// Or use the sync() function to prevent duplicated relations.
$car->valets()->sync([ $valet1->id, $valet2->id, ]);
$car->owners()->sync([ $owner1->id, $owner2->id, ]);
Retrieve Records:
// Get driver (Valet/Owner) Cars
$valet->cars $owner->cars
// Get Car drivers (Valet and Owner)
$car->owners $car->valets
Read :
I hope you like this Post, Please feel free to comment below, your Any Idea, suggestion and problems if you face - I am here to Resolve your Any problems.We hope it can help you...
No comments :
Post a Comment