2016-05-02 102 views
3

我創建laravel 5封郵件系統,但我不能得到休養頁發件人信息(如姓名電子郵件...)雄辯ORM關係5

我有消息表:

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'); 
     }); 
    } 

在模型創建補充一點:

消息模型:

class Message extends Model { 

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

和用戶模型我添加此功能:

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

但是當我嘗試獲取用戶的信息,並希望得到例如{{$ MESSAGE->用戶>名稱}},我得到一個錯誤信息我試圖讓非對象

的財產,這是控制器添加到該頁面

回答

2
當你使用

那麼默認用戶的關鍵領域:return $this->belongsTo('App\User');如果一個表名是這樣的:table_name_id在這個例子中會像:user_id

我看你需要關係到用戶表:

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

所以最好的解決方法是將創建兩個方法,如:

那麼你可以撥打:

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

and

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

您可以用其他方式命名此方法,例如:sourceUser()

+0

它的作品謝謝你兄弟 –

0

看來你沒有爲消息模型設置外鍵。如果一個用戶有很多消息,你應該添加這樣的外鍵

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'); 
      }); 
     }