我有点坚持这个,不知道如何推进这个。
我有两个模型:用户和孩子,他们处于关系。
(请记住,这只能说明问题)
class Child extends Model{
protected $primaryKey = 'id_child';
public $appends = ['is_alive'];
public function user(){
return $this->belongsTo('Models\User','id_user');
}
public function getIsAliveAttribute(){
if (!is_null($this->lifetime_updated_at))
return (Carbon::parse($this->lifetime_updated_at)->addMinute($this->lifetime) >= Carbon::now());
else
return false;
}
}
class User extends Model{
protected $primaryKey = 'id_user';
public $appends = ['is_alive'];
public function childs(){
return $this->hasMany('Models\Child','id_user');
}
public function getIsAliveAttribute(){
if (!is_null($this->lifetime_updated_at))
return (Carbon::parse($this->lifetime_updated_at)->addMinute($this->lifetime) >= Carbon::now());
else
return false;
}
}
现在我想在Controller中使用 Eager Loading 来从用户检索我的Childs数据。
但我的用户模型对象来自我的应用程序中的MiddleWare。所以我只使用用户模型对象,我不想再使用“with()”查询用户。
$user = User::where('name','DoctorWho')->first();
return user->childs()->find(3);
此操作返回的内容:
{
"id_child": 3,
"name": "JayZ",
"last_name": "Etc",
"lifetime": 1,
"lifetime_updated_at": null,
"created_at": "2017-05-29 21:40:02",
"updated_at": "2017-05-29 21:40:02",
"active": 1
}
我需要什么(附加属性)
{
"id_child": 3,
"name": "JayZ",
"last_name": "Etc",
"lifetime": 1,
"lifetime_updated_at": null,
"created_at": "2017-05-29 21:40:02",
"updated_at": "2017-05-29 21:40:02",
"active": 1,
"is_alive": true
}
甚至可以使用预先加载来检索具有附加属性的子数据?
注意:此用户对象来自中间件,我必须使用用户模型对象来获取其子项的附加属性。
先谢谢, LosLobos
答案 0 :(得分:0)
你在这里做的不是急切的加载。您的childs
关系错了。应基于模型和定义的其他关系return $this->hasMany('Models\Child', 'id_user');
。
以下是一些可以访问子信息的方法。默认情况下,这些应该尊重$appends
属性并加载字段。
$childId = 3;
$user = User::with('childs')
->where('name', 'DoctorWho')
->first();
return $user->childs()->where('id_child', $childId)->first();
// Or
$user = User::with(['childs' => function ($query) use ($childId) {
$query->where('id_child', $childId);
}])
->where('name', 'DoctorWho')
->first();
return $user->childs->first();
// Or
$child = Child::whereHas('user', function ($query) {
$query->where('name', 'DoctorWho');
})
->find(3);
return $child;
编辑:
如果您已拥有用户模型,则可以执行此操作。
$child = Child::where('id_user', $user->id_user)
->where('id_child', 3)
->first();
return $child;
答案 1 :(得分:0)
问题是我做错了什么与Eloquent无关,因为附带的属性附带了这个模型!