雄辩的查询构建器laravel 5.6中的未知列

Posted

技术标签:

【中文标题】雄辩的查询构建器laravel 5.6中的未知列【英文标题】:Unknown column in eloquent query builder laravel 5.6 【发布时间】:2018-03-16 15:05:57 【问题描述】:

gwrcategory 和 gwrproces 之间的关系是一对多的。 gwrproces 和 gwrlist 之间是多对一的。

我使用此代码在数据中进行搜索。我现在使用 % 来查找所有内容,直到它工作为止。

    $searchresult = GwrCategory::
    whereHas('gwrproces', function($query) use ($request)
        $query->where('gwr_code', 'LIKE', '%'.$request->input('gwrcode').'%')->
        whereHas('gwrlist', function($query) use ($request)
        
            $query->where('versie', 'LIKE', '%');
        
    )->with('gwrlist')->get();
    
)->with('gwrproces')->get();

上面代码生成的sql是:

select * from `gwr_proces` 
where `gwr_proces`.`gwr_category_id` = `gwr_categories`.`id` and `gwr_code` LIKE %20% 
and exists 
(select * from `gwr_lists` 
 where `gwr_proces`.`gwrlist_id` = `gwr_lists`.`id` and `versie` LIKE %)

这给出了一个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gwr_categories.id' in 'where Clause'。

我已经在 phpmyadmin 中使用过该查询,这似乎可以正常工作。我只在第一个 select * from 中添加了gwr_categories

select * from `gwr_proces`,`gwr_categories` 
where `gwr_proces`.`gwr_category_id` = `gwr_categories`.`id` and `gwr_code` LIKE '%' 
and exists 
(select * from `gwr_lists` 
where `gwr_proces`.`gwrlist_id` = `gwr_lists`.`id` and `versie` LIKE '%')

我的问题是:我如何说服 eloquent 添加正确的列或重写代码以使其在 gwrproces 和 gwrlist 表中搜索列中的特定文本,同时保持与类别的关系完整?

编辑:我使用急切加载,因此使用 with()->get()

【问题讨论】:

【参考方案1】:

问题在于您执行了嵌套查询。 你也不能像那样使用急切加载。

删除->with('gwrlist')->get()

【讨论】:

后续问题:我得到的结果太多,我只想要匹配的结果。我得到了同一类别中的所有 gwrprocesses,而不仅仅是匹配的进程。 您必须将whereHas('gwrproces' 的约束添加到GwrCategory::gwrproces() 关系。 我不确定你的意思,我在模型文件中这样做吗?你能举个例子吗?我已经为此苦苦挣扎了几个小时,似乎无法解决这个问题。 我开始聊天:chat.***.com/rooms/166981/… 我发现我需要组合 whereHas(过滤类别,虽然仍然包含所有进程),然后在 whereHas 右括号上使用 with,然后 where 与 whereHas 中的相同,这会过滤掉进程。

以上是关于雄辩的查询构建器laravel 5.6中的未知列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询构建器与雄辩的关系

Laravel 雄辩与查询构建器的优缺点

laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑

Laravel 5.6 查询构建器总和

Laravel 5.6 |雄辩的一对多关系

在laravel 5.6中雄辩地返回null值