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

Mysql 使用Laravel eloquent从一个表中检索数据并按相关表列排序,mysql,laravel-5.1,Mysql,Laravel 5.1,我有两个模型类别和事务表结构如下 Categories: id,category_name,.. 及 关系是 类别有许多事务 事务blongsTo类别 我想检索事务表中按类别名称排序的所有数据 最重要的是,我想用雄辩的方法得到它。 我试过渴望的工作,但我认为这对我们的关系不起作用 下面是我用于急切加载的代码 $transactions = Transaction::with(['category' => function ($query) { $query

我有两个模型类别和事务表结构如下

Categories:
id,category_name,..

关系是

类别有许多事务 事务blongsTo类别 我想检索事务表中按类别名称排序的所有数据

最重要的是,我想用雄辩的方法得到它。 我试过渴望的工作,但我认为这对我们的关系不起作用

下面是我用于急切加载的代码

$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);
如果有人能帮我,那就太好了。非常感谢。
注意:我使用的是Laravel5.1

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

您必须提供定义关系的方法名称,在您的案例中,这是类别


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

您必须提供定义关系的方法名称,在您的案例中,这是类别


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

要返回按相关模型(
hasMany
)列排序的雄辩模型,我必须加入表,然后
orderBy
,仍然得到模型,但按课程日期、开始日期、时间正确排序

Laravel5.7,我认为没有更干净的解决方案(至少在经过几个小时的修补和搜索网络之后)

要返回按相关模型(
hasMany
)列排序的雄辩模型,我必须加入表,然后
orderBy
,仍然得到模型,但按课程日期、开始日期、时间正确排序


Laravel 5.7,我认为没有更干净的解决方案(至少在修补和搜索网络几个小时后)。

对不起!此代码不起作用。我尝试过类似的代码,但它不起作用。它抛出的错误是“调用未定义的方法illumb\Database\elount\Collection::with()”。似乎与不与集合一起使用。我曾尝试直接使用“$transactions=Transaction::with('categories')->group_by('categories.name')->get()”,但它对未定义的方法illumb\Database\Query\Builder::group_by()抛出错误调用。更新后的答案给出了此错误“调用未定义的方法illumb\Database\Query\Builder::group_by()”。我在发帖之前已经试过了。你有什么建议@DyanSorry!此代码不起作用。我尝试过类似的代码,但它不起作用。它抛出的错误是“调用未定义的方法illumb\Database\elount\Collection::with()”。似乎与不与集合一起使用。我曾尝试直接使用“$transactions=Transaction::with('categories')->group_by('categories.name')->get()”,但它对未定义的方法illumb\Database\Query\Builder::group_by()抛出错误调用。更新后的答案给出了此错误“调用未定义的方法illumb\Database\Query\Builder::group_by()”。我在发帖之前已经试过了。您是否有任何建议@DyanThe相同的答案已经给出,但不起作用。请参阅@Dylan Pierce的答案,并阅读评论,以了解我使用代码得到了什么。感谢you@Jnana实际上,它与我引用的方法名略有不同。注意,我建议将
->与('category')
一起使用,因为这是定义关系的方法的实际名称,而不是
->与('categories')
。正确引用该方法可以解决您遇到的问题,因为它将调用已定义的方法。非常感谢您花时间帮助我。我明白你想做什么。但遗憾的是,这不起作用。根据Dylan的回答,我也使用了类别,因为没有类似类别的方法。你还有什么想法吗?当你使用分类时,你会得到什么错误信息?下面的另一个答案中的错误是指使用Categories Update my answer,删除
all()
将确保链接生成器,不是用第一种方法获得集合。相同的答案已经给出,但不起作用,请参阅@Dylan Pierce的答案并阅读注释,以查看我使用代码得到的结果。感谢you@Jnana实际上,它与我引用的方法名略有不同。注意,我建议将
->与('category')
一起使用,因为这是定义关系的方法的实际名称,而不是
->与('categories')
。正确引用该方法可以解决您遇到的问题,因为它将调用已定义的方法。非常感谢您花时间帮助我。我明白你想做什么。但遗憾的是,这不起作用。根据Dylan的回答,我也使用了类别,因为没有类似类别的方法。你还有什么想法吗?当你使用分类时,你会得到什么错误信息?下面另一个答案中的错误是指使用Categories Update my answer,删除
all()
将确保链接生成器,而不是使用第一个方法获取集合。您好,您找到解决方案了吗,或者找到了join方法吗?非常感谢。您好,您找到解决方案了吗?或者是join方法?非常感谢。
public function category()
{
    return $this->belongsTo('App\Category', 'category_id');
}
$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);
$cs = Course::where(['courses.active' => 1])
->whereHas('course_dates', function ($join) use ($now) {
    $join->where('course_dates.start_date_time', '>', $now);
    $join->orderBy('course_dates.start_date_time', 'asc');
})
->whereHas('category', function ($join) use ($cat_slug) {
    $join->where('categories.url_slug', '=', $cat_slug);
})
->whereHas('language', function ($join) use ($cat_slug) {
    $join->where('languages.string_id', '=', strtoupper(App::getLocale()));
})
->with(['course_dates' => function($q){
    $q->orderBy('course_dates.start_date_time', 'desc');
}])
->join('course_dates' ,'course_dates.course_id', '=', 'courses.id')
->orderby('course_dates.start_date_time')
->limit(7)
->get();