lundi 21 septembre 2015

Retrieve data from one table and order by related table column using Laravel eloquent

I have two models Category and Transaction the table structure are like this

Categories:
id,category_name,..

and

Transactions:
id,category_id,amount..

The relation is

Category hasMany transactions

public function transactions()
{
    return $this->hasMany('App\Transaction');
}

Transactions blongsTo Category

public function category()
{
    return $this->belongsTo('App\Category', 'category_id');
}

I want to retrieve all data of transaction table which are sorted by category name.

Most importantly I want to get it using the eloquent method. I have tried eager load which I think doesn't work on the belongsTo relationship.

Here is the code I have used for the eager load.

$transactions = Transaction::with(['category' => function ($query) {
                $query->orderBy('category_name', 'asc');
            }])->paginate(10);

So far I can achieve this by writing a query like below, but I'd like to use the eloquent method.

$transactions = Transaction::select(DB::raw('transactions.*'))
                ->leftJoin(DB::raw('(select id,category_name from categories) as categories'), 'categories.id', '=', 'transactions.category_id')
                ->orderBy('category_name', 'asc')
                ->paginate(10);

It'd be nice if someone can help me with this. Thank You. Note: I am using Laravel 5.1



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire