使用Laravel eloquent从一个表中检索数据并按相关表列排序

时间:2015-09-21 16:05:24

标签: mysql laravel-5.1

我有两个模型Category和Transaction表结构就像这样

Categories:
id,category_name,..

Transactions:
id,category_id,amount..

关系是

类别包含多个交易

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

交易blongsTo Category

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

我想检索交易表的所有数据,这些数据按类别名称排序。

最重要的是,我希望使用雄辩的方法来获取它。 我已经尝试过急切加载,我认为这对于belongsTo关系没有效果。

这是我用于急切加载的代码。

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

到目前为止,我可以通过编写如下的查询来实现这一点,但我想使用雄辩的方法。

$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);

如果有人可以帮助我,那就太好了。谢谢。 注意:我使用的是Laravel 5.1

2 个答案:

答案 0 :(得分:0)

$transactions = Transaction::with('categories')->group_by('category.name')->get();

答案 1 :(得分:0)

您必须提供定义关系的方法名称,在您的情况下,这是类别。

$transactions = Transaction::all()->with('category')->group_by('category.name')->get();