2015-06-29 55 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"); 
}]);