【问题标题】:Specifying a select clause in Laravel's eloquent query在 Laravel 的 eloquent 查询中指定一个 select 子句
【发布时间】:2013-12-18 01:30:57
【问题描述】:

表格

category                 category_path
---------------          ----------------
id                       category_id
title                    path_id
                         level

查询

    CategoryPath::with('Category')
        ->select('*', DB::Raw('group_concat(title ORDER BY level SEPARATOR " > ") as name'))
        ->groupBy('category_path.category_id')->paginate(10);

我在group_concat 中收到错误Unknown column 'title'

如何从相关表中进行选择?

简单的解决方案:

使用模型类而不是数据库类然后查询将保持雄辩的关系:

$categories = CategoryPath::select('*', DB::Raw('group_concat(title ORDER BY level SEPARATOR " > ") as name'))
    ->leftJoin('category', 'category_path.path_id', '=', 'category.id')
    ->groupBy('category_path.category_id')
    ->orderBy('name', 'ASC')
    ->paginate(10);

【问题讨论】:

  • 为什么只想访问某些属性?
  • 我需要 group_concat 类别标题,以便打印为完整路径,如 Computers > Parts > CPU

标签: php mysql laravel eloquent


【解决方案1】:

您可以使用lists() 方法。

$categoryPath = CategoryPath::with('category')->paginate(10);

foreach($categoryPath as $path) {
    echo implode(' > ', $path->category->lists('title'));
}

这应该会产生预期的效果,尽管我做了一些假设。

【讨论】:

  • 这可行,但我宁愿使用查询生成器编写完整的查询。我想知道我是否可以使用雄辩的关系来做到这一点。
  • 您是否尝试将group_concat()title 部分更改为category.title
  • 是的,我试过了。有同样的错误Unknown column 'category.title
  • 我认为你最好的选择是我上面建议的方法,或者为此切换到DB
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多