Eloquent:with()字段返回null

时间:2015-06-29 06:10:56

标签: laravel eloquent

我有以下模特:

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类中的sender()获取特定字段。然而,

$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 这里的表结构:

user:
- id
- username

message_users
- id
- user1_id
- user2_id

messages
- id
- message_user_id
- user_id
- content

1 个答案:

答案 0 :(得分:0)

修改关系select子句的一个规定是必须包含外键字段,否则一旦从数据库中检索到相关对象,Laravel将不知道如何将相关对象相互链接

将外键添加到select子句中:

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