El método adjuntar () de Laravel no funciona en el lado hasMany

2 minutos de lectura

Avatar de usuario de Bledson
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');

Avatar de usuario de Nick Coad
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

Avatar de usuario de UserHelpNeeding02356
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.

¿Ha sido útil esta solución?