【问题标题】:Query builder object doesn't see aliases in previously built object (Laravel)查询构建器对象在以前构建的对象(Laravel)中看不到别名
【发布时间】:2015-12-03 00:44:57
【问题描述】:

这是我的第一个查询:

$base=\DB::table('user')->select('firstname as name');

然后我想在第二个查询中访问别名列:

$base->select('name');

但我看到了错误。我可以从表用户访问所有列。有没有办法改变它,以便我可以在第二个查询中使用别名?

完整代码在这里:

$base=\DB::table('user')->select('firstname as name');
var_dump($base->get());//Everything is ok, I see the aliases 
var_dump($base->select('name')->get);//I see nothing, there's no column 'name'

更多代码在这里:

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

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

【问题讨论】:

  • 第二个查询是什么意思?请发布整个代码,以便我们查看关系,因为听起来您可能在这里误解了一些东西。
  • 你能发布 var_dump($base->get()) 的结果吗? ?
  • 请发布完整的代码你想如何使用第二个查询。因为$base已经包含了name,所以我看不出你为什么要再做$base->select('name')
  • 请发布完整代码。您应该使用 ->get 作为 ->get()->where('age', 10) 作为 ->where('age', '=', 10) 。您还选择了name 2 次。看不到原因。你如何测试它是否为空?您是否在日志中看到错误?

标签: php mysql laravel query-builder


【解决方案1】:

您不能创建永久的列别名。但是,您可以创建一个view,其中将包含您希望命名的字段。然后通过模型的$table 属性将您的模型作为常规表指向此视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-09-05
    • 2020-03-19
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多