如何在Laravel中雄伟地使用via对象获取数据?

时间:2019-10-09 07:33:56

标签: laravel laravel-5 eloquent

实际上,我想使用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.

3 个答案:

答案 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);