Die Laravel-Attach()-Methode funktioniert nicht auf der HasMany-Seite

Lesezeit: 2 Minuten

Bledsons Benutzeravatar
Bledson

Die Anwendung hat die Modelle:

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

Der folgende Code funktioniert:

Atividade::find($id)->intervencoes()->attach($intervencao_id);

Aber dieses…

Intervencao::find($id)->atividades()->attach($atividade_id);

Gibt eine BadMethodCallException zurück:

Aufruf der undefinierten Methode Illuminate\Database\Query\Builder::attach()

LÖSUNG (danke an @gnack):

Ich habe versucht, eine Viele-zu-Viele-Beziehung einzurichten, also musste ich das nur ändern …

return $this->hasMany('Atividade');

Dazu:

return $this->belongsToMany('Atividade');

Benutzeravatar von Nick Coad
Nick Coad

Siehe die Laravel-Dokumentation hier:
http://laravel.com/docs/eloquent#inserting-related-models

Grundsätzlich haben Sie zwei verschiedene Arten von Beziehungen für dieselben zwei Tabellen eingerichtet – Sie haben eine Viele-zu-Viele- und eine Eins-zu-Viele-Beziehung eingerichtet. Es sieht so aus, als ob Sie wahrscheinlich viele zu vielen wollten, also müssen Sie diese Zeile ändern:

return $this->hasMany('Atividade');

Dazu:

return $this->belongsToMany('Atividade');

Dadurch wird die Beziehung als Viele-zu-Viele-Beziehung eingerichtet, die dann die unterstützt attach() Methode.

Der attach() Methode ist nur für Many-to-Many, für andere Beziehungen gibt’s save() oder saveMany() Und associate() (siehe die oben verlinkten Dokumente).

  • Ja, ich komme durcheinander. Danke!

    – Bledson

    5. Februar 2014 um 2:26 Uhr

Benutzeravatar von UserHelpNeeding02356
BenutzerhilfeNeeding02356

Siehe die Dokumentation Laravel 5.7

Ein Kommentar gehört zu einem eindeutigen Beitrag

class Comment extends Model
{
    /**
     * Get the post that owns the comment.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

Ein Beitrag kann mehrere Kommentare haben

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }

Wenn Sie eine Zugehörig-Beziehung aktualisieren/löschen möchten, können Sie die Associate/Dissoziate-Methode verwenden.

$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() ist für Viele-zu-Viele-Beziehungen. Es scheint, dass Ihre Beziehung eine Viele-zu-Viele-Beziehung sein soll, aber Sie haben sie dafür nicht richtig eingerichtet.

class Intervencao extends Eloquent {
    public function atividades() {
        return $this->belongsToMany('Atividade');
    }
}

Dann ist die attach() sollte arbeiten

In meinem Fall habe ich zwei roles () -Methoden, weshalb dieser Fehler ausgelöst wird.

1444650cookie-checkDie Laravel-Attach()-Methode funktioniert nicht auf der HasMany-Seite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy