I had two models in Laravel and I used Laravel for API.
Wallet = [name, wallet_category_id, user_id]
Wallet_Category = [id, name]
I call all wallet using get() in controller, how I can add wallet category name in my output ?
Wallet::where('user_id', $request->get('user_id'))->get()
the output will be like :
[
{
"id": 12,
"user_id": 2,
"name": "wallet1",
"wallet_category_id" : 1,
"created_at": "2020-03-09 22:40:29",
"updated_at": "2020-03-09 22:40:29"
},
{
"id": 13,
"user_id": 2,
"name": "wallet2",
"wallet_category_id" : 2,
"created_at": "2020-03-10 13:57:37",
"updated_at": "2020-03-10 13:57:37"
}
]
I want output like this :
[
{
"id": 12,
"user_id": 2,
"name": "wallet1",
"wallet_category_id" : 1,
"created_at": "2020-03-09 22:40:29",
"updated_at": "2020-03-09 22:40:29",
"category" : "cat_1"
},
{
"id": 13,
"user_id": 2,
"name": "wallet2",
"wallet_category_id" : 2,
"created_at": "2020-03-10 13:57:37",
"updated_at": "2020-03-10 13:57:37",
"category" : "cat_2"
}
]
is it possible?
thanks before.
Relationship
Make relationship in Wallet
model
class Wallet extends Model
{
public function walletcategory()
{
return $this->belongsTo('App\Wallet_Category','wallet_category_id','id');
}
}
Now in controller
$wallets = Wallet::with('walletcategory')->where('user_id', $request->get('user_id'))->get();
foreach($wallets as $wallet){
$wallet->walletcategory->name
}
Join
If you want to get it by using join then follow below query.
Wallet::select('wallet.*','wallet_category.name')->leftjoin('wallet_category','wallet_category.id','wallet.wallet_category_id')->where('wallet.user_id', $request->get('user_id'))->get();