该应用程序有以下模型:
Atividade.PHP
class Atividade extends Eloquent { public function intervencoes() { return $this->belongsToMany('Intervencao'); } }
Intervencao.PHP
class Intervencao extends Eloquent { public function atividades() { return $this->hasMany('Atividade'); } }
以下代码有效:
Atividade::find($id)->intervencoes()->attach($intervencao_id);
但是这个…
Intervencao::find($id)->atividades()->attach($atividade_id);
返回BadMethodCallException:
Call to undefined method Illuminate\Database\Query\Builder::attach()
解决方案(感谢@gnack):
我试图建立一个多对多的关系,所以只需要改变这个……
return $this->hasMany('Atividade');
对此:
return $this->belongsToMany('Atividade');
请参阅Laravel文档:
http://laravel.com/docs/eloquent#inserting-related-models
http://laravel.com/docs/eloquent#inserting-related-models
基本上,您为相同的两个表设置了两种不同类型的关系 – 您已经设置了多对多和一对多.看起来你可能想要多对多,所以你需要改变这一行:
return $this->hasMany('Atividade');
对此:
return $this->belongsToMany('Atividade');
attach()方法仅适用于多对多,对于其他关系,还有save()或saveMany()和associate()(请参阅上面链接的文档).