2016-11-13 20 views
0

我正在使用Laravel 5.3广告在通过hasMany关系保存时存在问题。Laravel在Pivot表上的一对多插入

我有表雇员和活动有一对多的关系,即每个员工将执行许多活动。

当我使用associate()加入活动对员工发给我一个错误:

BadMethodCallException in Builder.php line 2440: 
Call to undefined method Illuminate\Database\Query\Builder::associate() 

下面是DB结构和代码:

数据库结构:

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 

模特类雇员:

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'); 
    } 
} 

模型类活动:

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'); 
    } 
} 

控制器:

public function EmployeeActivityAssociation() 
{ 
    $employee_id = Input::get('employee_id'); 
    $activity_ids = Input::get('activity_id'); // This is an array of activities 
    $employee = Employee::find($employee_id); 
    if (!empty($employee)) { 
     //Adding activity under the employee 
     foreach ($activity_ids as $id) { 
      $activity = Activity::find($id); 
      $employee->activity()->associate($activity); 
      $employee->save(); 
     } 
     return 'Activities asscoiated to employee'; 
    } 
    else { 
     return 'Employee not found'; 
    } 
} 

难道我定义错误在这里我的关系?

+1

http://stackoverflow.com/questions/19868838/call-to-undefined-method-illuminate-database-query-builderassociate这可以帮助你。 –

+1

它是多对多的。 –

回答

2

您的关系没有正确定义。通过查看你的表格结构应该是many-to-many的关系。

模型类员工:

public function activity() { 
    return $this->belongsToMany('App\Models\Activity', 'employee_activity', 'employee_activity_employee_id', 'employee_id'); 
} 

模型类活动:

public function employee() { 
    return $this->belongsToMany('App\Models\Employee', 'employee_activity', 'employee_activity_activity_id' ,'activity_id'); 
} 

所以你的控制器应为:

public function EmployeeActivityAssociation() 
{ 
    $employee_id = Input::get('employee_id'); 
    $activity_ids = Input::get('activity_id'); // This is an array of activities 
    $employee = Employee::find($employee_id); 
    if (!empty($employee)) { 
     $employee->activity()->attach($activity_ids); 
     return 'Activities asscoiated to employee'; 
    } 
    else { 
     return 'Employee not found'; 
    } 
} 

如果你要坚持一对一许多关系,那么你必须改变你的表模式为:

删除表employee_activity表并在活动表中添加第employee_id列,然后根据one-to-many定义关系。