微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从单个对象中的 Laravel 关系中获取数据?

如何解决如何从单个对象中的 Laravel 关系中获取数据?

用户模型中这是我的关系

public function User() {
    return $this->belongsTo('App\models\Users','UserId');
}

在钱包模型中这是我的关系

public function Wallet() {
    return $this->HasOne('App\Models\Wallet','UserId','Id');
}

但是当我运行查询

    $user = Users::with([
        'Wallet' => function($query){
            $query->select('test_userwallet.UserId','test_userwallet.CoinBalance');
        }
    ])->get()->toArray();

我正在这样的对象中获取数据

{
    "Id": 1,"UID": "8oDI617ZlsInXtUkRpMqVKo5J4XPzI12567","CountryCode": "91","Status": "active","TimeStamp": "2021-02-12 06:43:08","wallet": {
        "UserId": 1,"CoinBalance": 6
    }

这完全没问题,但我猜有什么方法方法可以让我以这种格式获取数据

{
    "Id": 1,"UserId": 1,"CoinBalance": 6
    }

就像在单个对象中一样,因为我在 apis 中工作,所以我想这样做

注意:仅使用查询或雄辩

解决方法

您可以使用 join

 $user = Users::query()->leftJoin('test_userwallet','test_userwallet.UserId','users.id')
            ->select(['test_userwallet.Id','UID','CountryCode','Status','TimeStamp','UserId','CoinBalance'])
       ->get()->toArray();
,

您已指定仅使用查询或雄辩。

我认为最好的方法是将端点响应作为 Resource 从控制器返回。

但是如果你必须把它作为模型的一个属性来做。您可以使用 $appends 数组和访问器。请参阅 docs 这将在模型序列化时将属性添加到模型中,就像在响应中返回一样。

protected $appends = [
    'coin_balance',];

public function getCoinBalance Attribute()
{
    return $this->Wallet->coin_balance;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。