问题描述
在用户模型中这是我的关系
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;
}