【问题标题】:Unknown column in eloquent query builder laravel 5.6雄辩的查询构建器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()

【问题讨论】:

    标签: php laravel eloquent laravel-5.6


    【解决方案1】:

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

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

    【讨论】:

    • 后续问题:我得到的结果太多,我只想要匹配的结果。我得到了同一类别中的所有 gwrprocesses,而不仅仅是匹配的进程。
    • 您必须将whereHas('gwrproces' 的约束添加到GwrCategory::gwrproces() 关系。
    • 我不确定你的意思,我在模型文件中这样做吗?你能举个例子吗?我已经为此苦苦挣扎了几个小时,似乎无法解决这个问题。
    • 我发现我需要组合 whereHas(过滤类别,虽然仍然包含所有进程),然后在 whereHas 右括号上使用 with,然后 where 与 whereHas 中的相同,这会过滤掉进程。
    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 2019-12-09
    • 2020-02-07
    • 2018-02-13
    • 1970-01-01
    • 2018-01-26
    • 2021-07-23
    相关资源
    最近更新 更多