首页 > 解决方案 > 如何在 Laravel eloquent 中使用 via 对象获取数据?

问题描述

实际上,我想使用 Model 对象而不是通过 Model 外观来获取数据,如下所述。

$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.

标签: laravellaravel-5eloquent

解决方案


您可以使用 Lazy Eager Loading,您不必再次查询用户,您已经拥有它:

$user = $this->getGuard()->user();

$user->load('cards');

Laravel 6 文档 - 雄辩的 - 关系 - 懒惰的渴望加载


推荐阅读