2017-08-31 6 views
-1

Ich versuche, Beziehungen über Laravel Eloquement-Modell zu erhalten. Ich habe zwei Modelle ex Books.php und Magazine.phpLaravel-Beziehung gibt NULL zurück

in Books.php ich habe

public function magazines() 
{ 
    return $this->hasMany('App\BOOKS', 'id', 'id'); 
} 

Dann bin ich versuchen, alle Zeitschriften zurückzukehren, die mit Bücher beziehen

$books = Book::find(123); 
$magazines = $books->magazines()->get(); 
return $magazines; 

aber ich habe NULL Zeitschriften! Wenn ich hinzufügen bin

$magazines = $books->magazines()->toSql(); 

ich bin sehen diese wählen.. select * from "MAGAZINE" where "MAGAZINE" "ID" ist null und "MAGAZINE" "ID" ist nicht null - was ist es? Warum Laravel-Modell setzen "ist null und ist nicht null"?

Hinweis, wenn ich ändern bin

public function magazines() 
{ 
    return $this->belongsToo('App\BOOKS', 'id', 'id'); 
} 

Select so sein würde. select * from "MAGAZINE" where "MAGAZINE" "ID" ist null Wer weiß, was ist das?

+1

zeigen Tabellenstruktur für Bücher Tabelle –

+1

Ich glaube nicht, Ihre Beziehung Sinn macht. Warum hat ein Buch viele Bücher? Sollte kein Buch zu vielen Zeitschriften gehören? – GiamPy

+0

Ich kann mir vorstellen, dass die Klasse, auf die Sie in der Beziehung verweisen, nicht existiert. Versuchen Sie, die Klasse, auf die Sie sich beziehen, in der 'hasMany' von' App \ BOOKS' zu 'App \ Book' zu ändern. –

Antwort

0

sollten Sie dies versuchen:

Bitte und versuchen

ändern
public function magazines() 
{ 
    return $this->hasMany('App\MAGAZINE'); 
} 

Hoffnung diese Arbeit für Sie

+0

Nein, ich habe verschiedene foreign_key und primary_id –

+0

@KonstantinMokhov Bitte geben Sie in Details –

0

Es gibt mehrere Probleme in Ihrem Code:

  • HasMany nimmt als erster Parameter die zugehörige Modellklasse, so in Ihrem Fall ist es sinnlos,zu übergeben 10. Sie sollten passieren App\Magazine vorausgesetzt, dass Ihr Magazin Modell Magazine genannt wird
  • Sie sagen, nicht auf die HasMany Beziehung, was der Name des Fremdschlüssels auf Ihrem magazines Tabelle ist.

, dass der Job

public function magazines() 
{ 
    return $this->hasMany('App\Magazine', 'book_id', 'id'); 
} 

IMHO vorschlagen tun soll ich Ihnen die Laravel Dokumentation zu lesen hier vor der Veröffentlichung gibt es viele Beispiele, die Ihnen erklären, wie mit Beziehungen und Datenbanktabellen arbeiten . Werfen Sie einen Blick auf One to Many Beziehungen.

EDIT

Sie können die ->get() auf die Beziehung weglassen und einfach Ihre Zeitschriften holen tun

$magazines = $books->magazines; 
+0

dieses Modell Laravel automatisch für projec –

+0

generiert, wenn ich Änderung Modellklasse sind, Namen der Tabellen geändert, aber "ist nicht null und ist null" noch in der Abfrage –

+0

Automatisch generierte Methoden sind nur Stubs, Sie müssen sie immer ändern, um die korrekte DB-Struktur widerzuspiegeln. Haben Sie die Methode 'hasMany' geändert, indem Sie Ihren Fremdschlüssel als zweiten Parameter und Ihren lokalen Schlüssel als ersten Parameter hinzufügen? – Desh901