2015-06-29 56 views
0

我有以下型號:雄辯:有()字段返回null

class User extends Model 
{ 
    public function messageUsers() 
    { 
     return $this->hasMany("MessageUser", "user1_id")->orWhere("user2_id", $this->id); 
    } 
} 

class MessageUser extends Model 
{ 
    public function messages() 
    { 
     return $this->hasMany("Message"); 
    } 
} 

class Message extends Model 
{ 
    public function sender() 
    { 
     return $this->belongsTo("User", "user_id", "id"); 
    } 
} 

我想從Message類發件人()獲取特定字段。然而,

$user = User::find(2); 
$msg_user = $user->messageUsers()->find(15); 
$tmp = $msg_user->messages()->with(["sender" => function($query) { $query->select("username"); }]) 

$ TMP返回null,而:

$msg_user->messages()->with("sender") 

返回所有領域的預期。

爲什麼with()函數沒有返回傳入字段名的值?

謝謝。

UPDATE下面的表結構:

修改的關係 select條款
user: 
- id 
- username 

message_users 
- id 
- user1_id 
- user2_id 

messages 
- id 
- message_user_id 
- user_id 
- content 
+0

你好,你可以請發表您的數據庫架構?或者至少是你想要涉及的表格? –

回答

0

一個規定是,外鍵字段必須包括在內,否則Laravel將不知道如何將相關鏈接一旦從數據庫中檢索到對象就會彼此對接。

添加外鍵到你的SELECT子句:

$tmp = $msg_user->messages()->with(["sender" => function($query) { 
    $query->select("id", "username"); 
}]);