雄辩的查询构建器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中的未知列的主要内容,如果未能解决你的问题,请参考以下文章