扩展attach()方法?

时间:2015-09-15 00:04:46

标签: php mysql laravel laravel-5 eloquent

我试图在belongsTo关系中向attach()方法添加属性,但它没有任何影响:

// User Model
class User extends Eloquent {
  public function roles(){
    return $this->belongsToMany(`App\Role`);
  }
}

// Role Model
class Role extends Eloquent {
  public function users(){
    return $this->belongsToMany(`App\User`);
  }

  public function attach($id, array $attributes = [], $touch = true){
    $attributes['foo'] = 'bar';
    parent::attach($id, $attributes, $touch);
  }
}

当我执行$user->roles()->attach($id, ['key' => 'value']);时,['key' => 'value']就在那里,但它没有我在扩展附加方法中设置的['foo' => 'bar'](我相信没有被召唤。

1 个答案:

答案 0 :(得分:0)

首先,如果您正在处理多对多关系,则必须使用附加方法

此处有更多信息:http://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

所以,你有两种不同的选择:

  • 您想要处理一对多关系。在这种情况下,您必须扩展 save()方法或 saveMany 方法。而且您必须处理HasMany类;

  • 您想要处理多对多关系。在这种情况下,是的,您必须处理 attach(),但是在BelongsToMany类中;