2016-05-09 9 views
0

Ok so versucht, herauszufinden, wie man diese Beziehung einrichten. Mit beredten Lumen. Ich habe zwei Tische. Eine Auflistungstabelle. welches Konsolen enthält. Ich möchte kein Emum oder einfachen Text in ihrem, also möchte ich das in einen Konsolentisch extrahieren. Konsole 1, Konsole 2 etc., aber ich kann die Beziehung aus irgendeinem Grund nicht zusammenbringen.Eloquent gehört zu Beziehung funktioniert nicht

Listing Table: 
id: 1 | console_id: 3 
id: 2 | console_id: 4 
id: 3 | console_id: 3 
id: 4 | console_id: 2 

Console Table: 
id: 1 | console: Console 1 
id: 2 | console: Console 2 
id: 3 | console: Console 3 

jetzt in meinem Listing Modell ich habe:

public function console() 
{ 
    return $this->belongsTo('App\Console'); 
} 

Die Beziehung kaputt ist oder ich bin nicht zu verstehen, wie diese Beziehung miteinander verbunden werden sollen ...

Antwort

1

Ich denke, Ihre Klasse kann nicht Console Name, Cuz Laravel Console Namespace oder Klassen, die Autoloader versuchen wird, es zu laden.

1) Benennen Sie Ihre Console Klasse so etwas wie ConsoleItem

2) Versuchen Sie es wie diese Felder, geben Sie genau zu schreiben (Cuz wollen wir nicht Tabellenstruktur ändern):

public function console() 
{ 
    return $this->belongsTo('App\ConsoleItem', 'console_id', 'id'); 
} 

3) Um es zu erhalten, indem Konsole mit() aufrufen:

$Listings = Listing::with(['console'])->whereConsoleId(3)->get(); 
foreach($Listings AS $Listing) { 
    echo 'Listing: '.$Listing->id.' | Console: '.$Listing->console->console."<br/>"; 
} 

Wenn es s funktioniert immer noch nicht, muss analysieren warum.

Fügen Sie bitte den Inhalt der Dateien für Ihre Modelle hinzu.

4) sauber Autoloader-Cache cli-Befehle Autoloader für Musik und sauber etc Dinge redump:

php artisan clear-compiled 
composer dump-autoload 

Aber! Es wäre besser, Ihre Modelle haben in app/Models Ordner zu sein, und haben Code wie folgt aus:

<?php namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Console extends Model 

so ist, dann wird Ihr Eintrag wie:

<?php namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Listing extends Model { 

    protected $table = 'listing'; 
    public $timestamps = false; 

    public function console() { 
    return $this->belongsTo('App\Models\Console', 'console_id'); 
    } 
} 

Für sie innerhalb Controller zu verwenden:

use App\Models\Listing; 

überprüfen Sie den Screenshot: http://joxi.ru/82QWW0f1a4YXrd

+0

ok. So fügte das Hinzufügen von App speziell das Beziehungsproblem hinzu! Jedoch. (Ich versuche, eine API zu bauen.) Und würde lieben, wenn ich Listing :: all() sagen würde, würde es den Text statt der Zahl ziehen ... wie feuert die Beziehung, wenn sie von der DB zieht? – Citti

+0

Verwenden Sie es so: Listing :: mit (['Konsole']) -> get(); aber im Falle einer Tabelle mit Tausenden von Daten empfehle ich Ihnen, sie zum Beispiel so zu verwenden: Listing :: with (['console']) -> paginate (50); und lassen Sie Ihre API klüger verwenden, indem Sie eine Anfrage wie http://somesite.com/api/listing?page=2 senden, die das Modell automatisch anweist, die nächsten 50 Elemente zurückzugeben. – num8er

+0

hmm so $ listings = Listing :: mit (['console']) -> get(); dd ($ Listings); gibt immer noch die ID und nicht den Namen ... – Citti