2016-05-02 30 views
3

ich erstellen, um Nachrichten-System auf Laravel 5, aber ich kann nicht Absenderinformationen auf Rekuperation Seite (wie Name E-Mail ...)Eloquent ORM Beziehung auf Laravel 5

Ich habe Nachrichten Tabelle erhalten:

public function up() 
    { 
     Schema::create('messages', function(Blueprint $table){ 
      $table->increments('id'); 
      $table->integer('destination_id')->unsigned(); 
      $table->integer('source_id')->unsigned(); 
      $table->string('sujet'); 
      $table->text('contenu'); 
      $table->boolean('vu')->default(0); 
      $table->boolean('repondu')->default(0); 
      $table->timestamps(); 
      $table->foreign('source_id')->references('id')->on('users')->onDelete('cascade'); 
      $table->foreign('destination_id')->references('id')->on('users')->onDelete('cascade'); 
     }); 
    } 

Auf den Modellen, erstelle ich hinzufügen:

Nachricht Modell:

class Message extends Model { 

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

und auf User-Modell Ich füge diese Funktion:

public function message() 
{ 
    return $this->hasMany('App\Message'); 
} 

Aber wenn ich zum Beispiel versuchen, Benutzernachrichten abrufen und erhalten möchten {{$ message-> user-> name}} ich eine Fehlermeldung erhalten, dass ich versuche Eigenschaft von nicht-Objekt zu erhalten

dies der Regler auf dieser Seite ist

Antwort

2

Well Schlüsselfeld des Standardbenutzers, wenn Sie verwenden: return $this->belongsTo('App\User'); wenn ein Tabellenname ist wie: table_name_id in diesem Beispiel wird wie seine : user_id.

Ich sehe, dass Sie die Beziehungen zu Benutzertabelle müssen auf:

$table->integer('destination_id')->unsigned(); 
$table->integer('source_id')->unsigned(); 

so die beste Lösung, zwei Methoden zu schaffen sein wird, wie:

dann können Sie anrufen:

{{$message->source->name}} 

und

{{$message->destination->name}} 

Natürlich können Sie diese Methode auf andere Weise benennen, wie zum Beispiel: sourceUser().

+0

es funktioniert, danke bro –

0

Es scheint, dass Sie den Fremdschlüssel für das Nachrichtenmodell nicht festgelegt haben. Wenn ein Benutzer viele Nachrichten hat, sollten Sie einen Fremdschlüssel wie diesen hinzufügen

public function up() 
     { 
      Schema::create('messages', function(Blueprint $table){ 
       $table->increments('id'); 
       $table->integer('user_id')->unsigned(); 
       $table->integer('destination_id')->unsigned(); 
       $table->integer('source_id')->unsigned(); 
       $table->string('sujet'); 
       $table->text('contenu'); 
       $table->boolean('vu')->default(0); 
       $table->boolean('repondu')->default(0); 
       $table->timestamps(); 
       $table->foreign('source_id')->references('id')->on('users')->onDelete('cascade'); 
       $table->foreign('destination_id')->references('id')->on('users')->onDelete('cascade'); 
      }); 
     } 
Verwandte Themen