【问题标题】:preserving aliases in laravel query builder在 laravel 查询生成器中保留别名
【发布时间】:2015-12-05 06:49:03
【问题描述】:
function getPerson(){
    return \DB::table('user')->select('firstname as name', 'age');
}

function getPet(){
    return \DB::table('pet')->select('petname as name', 'age');
}

function getNames($var){
    return $var->select('name')->where('age', 10)->get();
}

$base = getNames(getPerson());//empty here
$base = getNames(getPet());//empty here

主要问题是我有很多不同的查询,我想给它们加上别名,然后用另一个查询为图表准备数据。别名消失就很难了。

【问题讨论】:

    标签: php mysql sql laravel query-builder


    【解决方案1】:

    每个查询只能有一个select()$var 被传递到 getNames() 是一个已经有 select() 的查询,因此添加更多 select() 将覆盖前一个。

    尝试从getNames() 中删除select() 并测试您是否得到结果。

    function getNames($var){
        return $var->where('age', 10)->get();
    }
    

    请记住,您使用的是“查询构建器”,这意味着您添加的每个查询约束都将添加到同一个查询中,而不是不同的查询。一旦您尝试获取结果数据集(如调用get()first() 等),整个查询将实际构建并执行。

    【讨论】:

    • 那么有没有办法执行嵌套选择?
    • 据我所知,Eloquent 不直接支持嵌套选择。在构建查询时需要使用一些原始 SQL。所以这取决于你想要实现的最终 SQL。试试谷歌“雄辩的嵌套选择”,周围有一些例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2021-06-12
    • 2015-07-10
    相关资源
    最近更新 更多