Es gibt zwei wichtige Modelle Resume
und Skill
. Resume
hat viele Fähigkeiten durch ResumeSkill
.Laravel Aufruf zu undefinierter Methode Illuminate Database Query Builder :: detach/attach() für hasManyThrough-Beziehungen
Wenn ich mein Formular mit Fähigkeiten einreiche, bevor ich sie zum Fortsetzen hinzufüge, entferne ich alle Fähigkeiten, die es bereits hat.
Aber ich habe dieses Problem, wenn ich die Methoden laufen attach()
und detach()
:
Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: Detach()
Dies ist mein Lebenslauf Modellklasse:
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;
class Resume extends BaseModel{
public function skills(){
return $this->hasManyThrough('\myApp\Skill', '\myApp\ResumeSkill');
}
}
Und das Hauptskript:
$record = \myApp\Resume::find($id);
$record->skills()->detach();
foreach($skills as $skill_id){
$record->skills()->attach($skill_id);
}
Was ist los? Einige Antworten, die ich sehe sagen attach()
ist eine BelongsTo-Methode, aber sie müssen alte Antworten sein: https://laravel.com/docs/5.2/eloquent-relationships#has-many-through. Wie auch immer, Associate/Dissociate funktionieren nicht so gut.
@solved
I BelongsToMany
verwendet haben sollte. Und attach
/detach
DOES arbeiten mit dieser Beziehung.
aber es gibt eine Zwischentabelle. Was ist eine entfernte Beziehung? –
In dem Fall haben wir drei Tabellen, wie Länder, Benutzer und Kommentare und ich möchte alle Kommentare eines bestimmten Landes erhalten. Im Ländermodell würde diese Implementierung verwendet: public function comments() {return $ this-> hasManyThrough ('App \ Kommentar', 'App \ User'); } –