Search code examples
phplaraveleloquentlaravel-api

Insert undefined variable in Laravel Eloquent get() query


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.


Solution

  • 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();