【问题标题】:Column not found: execption in laravel未找到列:laravel 中的异常
【发布时间】:2019-05-12 08:12:50
【问题描述】:

我正在从事一些维护项目,其中所有都是 sql 查询,但我想将其转换为 laravel。这是以下查询:-

$members = Member::select('members.id','members.first_name',
                          'members.surname','members.username','members.password',
                          'members.email','user_access.active',
                          DB::raw('SUM( IF (user_access.active = "y", 1, 0) ) as acount'))
        ->join('user_access','user_access.member_id','=','members.id')
        ->where('special_access','=','n')
        ->groupby('user_access.member_id')
        ->having('acount','>','0')
        ->orderby('members.id','desc')
        ->orderby('members.username','ASC')
        ->orderby('user_access.note','DESC')
        ->paginate(30);

当我执行查询时它给了我错误。在have子句的错误下方

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'acount' in 'having clause' (SQL: select count(*) as aggregate from `members` inner join `user_access` on `user_access`.`member_id` = `members`.`id` where `special_access` = n group by `user_access`.`member_id` having `acount` > 0)

【问题讨论】:

  • 它的acount表示activecount,表示user_access表中的活跃列
  • 这不是我的帐户.. 请仔细检查我的查询
  • 您也应该显示您的表格列详细信息,没有人会了解表格结构,无法帮助您。
  • 尝试拥有Raw(DB::raw('SUM( IF (user_access.active = "y", 1, 0) ) as acount')>0) 而不是你拥有
  • Illuminate\Database\Query\Expression 类的对象无法转换为 int

标签: mysql laravel laravel-5.5 laravel-query-builder


【解决方案1】:

我想这样的事情会对你有所帮助。

$userAccess = DB::table('user_access')
    ->where('special_access','=','n')
    ->where('active','y')
    ->groupby('member_id');

Member::select([
    'members.id', 
    'members.first_name', 
    'members.surname', 
    'members.username', 
    'members.password', 
    'members.email', 
    'user_access.active'
])->joinSub($userAccess, 'user_access', function($join){
    $join->on('user_access.member_id', '=', 'members.id');
})->orderby('members.id','desc')
->orderby('members.username','ASC')
->orderBy('user_access.note','asc')
->paginate(30);

$members = Member::select([
    'members.id', 
    'members.first_name', 
    'members.surname', 
    'members.username', 
    'members.password', 
    'members.email', 
    'user_access.active'
])->join('user_access', function($join){
    $join->on('user_access.member_id', '=', 'members.id')->on('user_access.active', '=', DB::raw('"y"'));
})
    ->where('special_access','=','n')
    ->groupby('user_access.member_id')
    ->orderby('members.id','desc')
    ->orderby('members.username','ASC')
    ->orderby('user_access.note','DESC')
    ->paginate(30);

正如apokryfos在cmets中所说:

分页器将尝试获取查询的计数,并在执行此操作导致此错误时从中删除所有选择。

如果您只需要带有user_access.active = "y" 的记录,那么您不需要首先选择它们然后尝试通过HAVING 过滤掉它们

【讨论】:

  • BadMethodCallException 调用未定义的方法 Illuminate\Database\Query\Builder::joinSub()
  • joinSub 在 laravel 5.7 上可用,你能试试我刚刚添加到帖子中的第二个代码吗?
  • SQLSTATE[42S22]:未找到列:1054 'on 子句'中的未知列'y'(SQL:从members 内部连接@987654329 上选择计数(*)作为聚合@987654329 @.member_id = members.iduser_access.active = y 其中special_access = n 分组user_access.member_id)
  • 抱歉,这行得通:->on('user_access.active', '=', DB::raw('"y"'))
  • 你的这个答案很好用...你能帮我回答这个问题吗stackoverflow.com/questions/54735320/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多