我有以下模特:
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
答案 0 :(得分:0)
修改关系select
子句的一个规定是必须包含外键字段,否则一旦从数据库中检索到相关对象,Laravel将不知道如何将相关对象相互链接
将外键添加到select子句中:
$tmp = $msg_user->messages()->with(["sender" => function($query) {
$query->select("id", "username");
}]);