2016-07-27 10 views
2

Ein Produkt hat eine Unterkategorie. In meiner Produkttabelle habe ich subcategory_id Feld. Ich habe auch eine anglesTo Beziehung zwischen Produkt- und Unterkategorie-Modellen eingerichtet. Also habe ich eine Methode, die alle Produkte mit einer bestimmten Tag-ID zurückgibt. Hier ist mein Code:Laravel - Unterkategorie von Produkt (AnginesTo) in Ajax Antwortdaten zugreifen.

public function getProductsByTag($tag_id) 
{ 
    $tag = Tag::find($tag_id); 
    $products = $tag->products; //belongsTo relationship 

    return json_encode(['products' => $products]); 
} 

Dann auf Erfolg in meiner Ajax-Request ich die Unterkategorie des Produkts zugreifen müssen, wie ich die Produkte des Tags $tag->products abgerufen. So in Laravel wäre es:

$subcategory = $product->subcategory;

Ich dachte, dass product.subcategory würde den Trick tun, aber ich bekomme nicht definiert. Hier ist meine Ajax-Erfolgsfunktion:

success: function (data) { 
    $.each(data.products, function (i, product) { 
    console.log(product.subcategory); 
    }); 
}, 

Ich bekomme undefined in meiner Konsole. Wie kann ich auf Beziehungen in Ajax-Antwortdaten zugreifen?

+2

in Ihrer Controller-Methode versuchen Sie diese $ Produkte = $ tag-> Produkte() -> mit ('Unterkategorie') -> get(); // goesTo relationship ' – zorx

+0

Probieren Sie diese '$ .each (Daten, Funktion (i, Produkt) { console.log (productsubkategorie); });' –

+1

@zorx Dies funktioniert. Ich habe jedoch ein Produkt, das eine Unterkategorie hat, die eine Kategorie hat. Wie kann ich auf die Kategorie zugreifen? Veröffentlichen Sie Ihren Kommentar als Frage, damit ich ihn genehmigen kann. – Codearts

Antwort

1

Ich habe eine Lösung gefunden, indem ich eine Variable zur Verfügung stelle, die die Beziehung innerhalb des Modells hält, das ich brauche. Ich füge eine Variable für die Unterkategorie in meinem Produktmodell und eine Variable für die Kategorie in meinem Unterkategorie-Modell hinzu. Hier ist, wie es aussieht: In meinem Produktmodell:

protected $with = array('subcategory'); 

In meinem Unter Modell:

protected $with = array('category');

Jetzt kann ich sie von meinen Ajax-Erfolg Antwortdaten leicht zugänglich machen.

2

Wie ich in meinem Kommentar gesagt habe, laravel lädt nicht automatisch alle Beziehungen, also müssen Sie das tun.

wenn Sie möchten, jedes Mal Unterkategorien in Ihre Produkte laden, so dass Sie Sie Modell aktualisieren müssen und fügen Sie ein with Attribut wie folgt:

//Product model 
protected $with = ['subcategory']; 

Oder wenn Sie gerade dies nur einmal tun wollen, so Sie müssen etwas tun wie:

+0

Danke für die Antwort! Ich habe bereits eine Lösung gefunden und meine Frage beantwortet. Es ist das gleiche wie Ihres. – Codearts

Verwandte Themen