php - Laravel One-To-Many insertion on a Pivot table -
i using laravel 5.3 ad having issues on saving through hasmany relationship.
i have tables employee , activity has one-to-many relation i.e each employee perform many activities.
when adding activities against employee using associate() send me error:
badmethodcallexception in builder.php line 2440: call undefined method illuminate\database\query\builder::associate() below db structure , code:
database structure:
employee (1st table) – employee_id – employee_name - created_at - updated_at activity (2nd table) – activity_id – activity_name - created_at - updated_at employee_activity (pivot table) – employee_activity_employee_id – employee_activity_activity_id model class employee:
class employee extends model { protected $table = 'employee'; protected $primarykey = 'employee_id'; public function activity() { return $this->hasmany('app\models\activity', 'employee_activity', 'employee_activity_employee_id', 'employee_id'); } } model class activity:
class activity extends model { protected $table = 'activity'; protected $primarykey = 'activity_id'; public function employee() { return $this->belongsto('app\models\employee', 'employee_activity', 'employee_activity_activity_id' ,'activity_id'); } } controller:
public function employeeactivityassociation() { $employee_id = input::get('employee_id'); $activity_ids = input::get('activity_id'); // array of activities $employee = employee::find($employee_id); if (!empty($employee)) { //adding activity under employee foreach ($activity_ids $id) { $activity = activity::find($id); $employee->activity()->associate($activity); $employee->save(); } return 'activities asscoiated employee'; } else { return 'employee not found'; } } do have relationship defined incorrectly here?
your relation not defined correctly. seeing table structure should many-to-many relationship.
model class employee:
public function activity() { return $this->belongstomany('app\models\activity', 'employee_activity', 'employee_activity_employee_id', 'employee_id'); } model class activity:
public function employee() { return $this->belongstomany('app\models\employee', 'employee_activity', 'employee_activity_activity_id' ,'activity_id'); } so controller should as:
public function employeeactivityassociation() { $employee_id = input::get('employee_id'); $activity_ids = input::get('activity_id'); // array of activities $employee = employee::find($employee_id); if (!empty($employee)) { $employee->activity()->attach($activity_ids); return 'activities asscoiated employee'; } else { return 'employee not found'; } } if want stick one-to-many relation have change table schemas as:
remove table employee_activity table , add column employee_id in activity table define relation according one-to-many.
Comments
Post a Comment