Bledson
La aplicación cuenta con los modelos:
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');
}
}
El siguiente código funciona:
Atividade::find($id)->intervencoes()->attach($intervencao_id);
Pero esto…
Intervencao::find($id)->atividades()->attach($atividade_id);
Devuelve una BadMethodCallException:
Llamada al método no definido Illuminate\Database\Query\Builder::attach()
SOLUCIÓN (gracias a @gnack):
Estaba tratando de establecer una relación de muchos a muchos, así que solo necesitaba cambiar esto…
return $this->hasMany('Atividade');
A esto:
return $this->belongsToMany('Atividade');
nick coad
Vea la documentación de Laravel aquí:
http://laravel.com/docs/eloquent#inserting-related-models
Básicamente, ha configurado dos tipos diferentes de relaciones para las mismas dos tablas: ha configurado muchos a muchos y uno a muchos. Parece como si probablemente quisieras muchos a muchos, por lo que deberás cambiar esta línea:
return $this->hasMany('Atividade');
A esto:
return $this->belongsToMany('Atividade');
Esto configurará la relación como una relación de muchos a muchos, que luego admitirá la attach()
método.
El attach()
el método es solo para muchos a muchos, para otras relaciones hay save()
o saveMany()
y associate()
(ver los documentos vinculados arriba).
-
Sí, me confundo. ¡Gracias!
– Bledson
5 de febrero de 2014 a las 2:26
UserHelpNeeding02356
Ver la documentación Laravel 5.7
Un comentario pertenece a una publicación única
class Comment extends Model
{
/**
* Get the post that owns the comment.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
Una publicación puede tener múltiples comentarios
class Post extends Model
{
/**
* Get the comments for the blog post.
*/
public function comments()
{
return $this->hasMany('App\Comment');
}
Cuando desee actualizar/eliminar una relación de pertenencia a, puede utilizar el método de asociación/disociación.
$post= App\Post::find(10);
$comment= App\Comment::find(3);
$comment->post()->associate($post); //update the model
$comment->save(); //you have to call save() method
//delete operation
$comment->post()->dissociate();
$comment->save(); //save() method
attach()
es para relaciones de muchos a muchos. Parece que se supone que su relación es de muchos a muchos, pero no la configuró correctamente para eso.
class Intervencao extends Eloquent {
public function atividades() {
return $this->belongsToMany('Atividade');
}
}
Entonces el attach()
Deberia trabajar
En mi caso, tengo dos métodos roles (), por eso arroja este error.