如何从单个对象中的 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;
}