2016-05-13 6 views
0

Ich muss jetzt mit 3 DB-Tabellen arbeiten. Eine Domain-Tabelle, eine Tags-Tabelle und eine Pivot-Tabelle. In meinen Pivot-Tabellen befinden sich nur 2 foreign_keys der beiden "Main-Tables". domains_id und tags_id sind die zwei Fremdschlüssel.Pivot-Tablet mit Laravel bearbeiten?

folgte ich die Einführung auf dieser Seite hier: http://laraveldaily.com/pivot-tables-and-many-to-many-relationships/

aber ich verstehe immer noch nicht die "Managing Many-to-Many Beziehungen: attach-lösen-sync" Teil.

Mein Controller-Code für die Tags ist:

$id = Input::get('id'); 
    $request = $request->tagging; 
    $tags = explode(',', $request); 
    $all_tags = []; 
    foreach ($tags as $tag) { 
     $tag = trim($tag); // entfernen von leerstellen 
     $friendly_tags = Str::slug($tag); // user friendly tags 
     if (Str::length($friendly_tags)) { 
      $all_tags[] = Tags_Domains::create([ 'name' => $friendly_tags ]); 
     } 
    } 

    $domain = Domains::query()->findOrFail($id); 
    $domain->tags()->saveMany($all_tags); 

In der ersten Zeile in der Funktion, die ich die ID der Domain bin immer. Diese ID sollte im Attribut domains_id in meiner Pivot-Tabelle gespeichert werden.

Nach dieser Zeile formatiere ich die Tags, die der Benutzer hinzufügen möchte und speichern Sie sie in meinem Array $ all_tags. Zum Beispiel:

$all_tags = [sunny', 'fitness', 'healthy']; 

Jetzt Spar ich sie in meinem Tags Tabelle mit:

Tags_Domains::insert($all_tags); 

Jetzt mag ich den Tag-IDs in dem tags_id Attribute in meiner Pivot-Tabelle speichern. Und ich weiß immer noch nicht, wie das aussieht. Der Laravel Doc. war nicht wirklich hilfreich.


mein realation in meinem Tags Modell:

public function domains() { return $this->belongsToMany('App\Models\technical\Domains', 'domain_tag', 'id', 'domains_id'); } 

meine realation in meinem Domains Modell:

public function tags() { return $this->belongsToMany('App\Models\technical\Tags_Domains', 'domain_tag', 'id', 'tags_id'); } 

+0

Sie brauchen nicht das Tags_Domains Modell, sollten Sie brauchen nur Tag und Domain-Modelle mit vielen zu viele Beziehungen definiert. Sehen Sie sich die Dokumentation an https://laravel.com/docs/5.1/eloquent-relationships#many-to-many –

+0

Ich habe meine Frage hinzugefügt. Ich habe das Pivotmodell entfernt und die Zeile im unteren Bereich meiner Frage zu meinem Domänenmodell hinzugefügt. - Aber ich verstehe immer noch nicht wirklich, wie man das benutzt .. – WellNo

Antwort

0

Es gibt verschiedene Möglichkeiten, wie Sie einen Tag verknüpfen können zu einer Domäne.

Wenn Sie ein Tag Objekt haben, können Sie die save() oder $ saveMany() Methode der Beziehung verwenden Sie es verlinken:

$domain->tags()->save($tag); 
$domain->tags()->saveMany([$tag1, $tag2]); 

Wenn Sie eine ID, Sie können attach() zu verknüpfen und detach() Methoden/geben Tag entkoppeln verknüpfen zu/von einer Domäne:

$domain->tags()->attach($tagId); 
$domain->tags()->detach($tagId); 

Schließlich gibt es die sync() Methode, die die Beziehung aktualisiert, so dass es nur die Datensätze enthält, deren IDs als Argument übergeben wurden. Im Folgenden werden alle Tags aus der Domäne entkoppeln und verknüpfen Sie dann nur Tags mit der ID 1 und 2:

$domain->tags()->sync(1,2); 

In Ihrem Fall müssen Sie die Art und Weise Sie Schlagwörter erstellen ändern. Bulk-Insert, wie Sie es tun, wird Ihnen weder die Tag-Objekte noch Tag-IDs geben, also müssen Sie sie einzeln erstellen.Sie können saveMany() verwenden, um sie mit der Domäne zu verknüpfen.

ersetzen

$all_tags[] = [ 'tags' => $friendly_tags ]; 

mit

$all_tags[] = Tag::create([ 'tags' => $friendly_tags ]); 

Und dann tut nur

$domain->tags()->saveMany($all_tags); 
+0

Ich gab das einen Versuch, aber ich bekomme einige Fehler .. Ich werde versuchen, sie zu beheben und zurück zu schreiben :) – WellNo

+0

Sicher, lass es mich wissen, wenn dort sind immer noch Probleme, möglicherweise gibt es Tippfehler im Code oder in einigen Problemen mit dem Rest Ihres Codes. –

+0

Ich habe meine Frage mit dem aktuellen Code aktualisiert, ich probiere immer noch einige Dinge aus :) – WellNo