实际上,我想使用Model对象而不是通过下面提到的Model Facade来获取数据。
$user = $this->getGuard()->user();
以上用户是当前登录的用户,
"id": 6,
"name": "kuser",
"email": "kuser@gmail.com",
"phone": "03345154067",
"is_subscribed": 0,
"subscription_date": null
但是当我尝试使用其相关模型(如卡)来获取相同的$user
对象时,通过执行$user->with(['cards'])->first();
会比使用如下所述的卡给出用户表的第一条记录。
"id": 1,
"name": "admin",
"email": "admin@gmail.com",
"phone": "03056494616",
"is_subscribed": 1,
"subscription_date": "2019-10-08",
"cards": []
上面提到的记录是用户对象。这是我的用户表的第一条记录。
实际上,我期待。
"id": 6,
"name": "kuser",
"email": "kuser@gmail.com",
"phone": "03345154067",
"is_subscribed": 0,
"subscription_date": null
及其相关的模型卡,例如
"id": 6,
"name": "kuser",
"email": "kuser@gmail.com",
"phone": "03345154067",
"is_subscribed": 0,
"subscription_date": null
"cards":[] // array of cards those belongs to it.
答案 0 :(得分:2)
您可以使用Lazy Eager Loading,而不必再次查询用户,您已经拥有了:
$user = $this->getGuard()->user();
$user->load('cards');
Laravel 6 Docs - Eloquent - Relationships - Lazy Eager Loading
答案 1 :(得分:1)
使用简单的public class SchoolsController : ODataController
{
private readonly ISchoolService _schoolService;
public SchoolsController(ISchoolService schoolService)
{
_schoolService = schoolService;
}
[EnableQuery(PageSize = 10,MaxExpansionDepth= 12,MaxAnyAllExpressionDepth = 5)]
public IQueryable<School> Get()
{
return _schoolService.Schools();
}
[HttpGet]
[EnableQuery]
public IQueryable<School> Schools()
{
return _schoolService.Schools();
}
}
吗?
where
那行不通吗?
答案 2 :(得分:0)
这是另一种方式
User::with(['cards'])->find($user->id);