【问题标题】:How to Fix WHERE Clause in Laravel如何修复 Laravel 中的 WHERE 子句
【发布时间】:2017-12-09 01:22:15
【问题描述】:

我在使用 WHERE 子句时遇到了 Laravel Eloquent 的问题。

代码

<?php

$locale = Session::get('locale');

$categories = Category::whereHas('translations', function ($query) use ($locale) {
    $query->where('locale', $locale);
})->get();

生成的 SQL

select * from `categories` 
    where exists (select * from `category_translations`
        where `category_translations`.`category_id` = `categories`.`id` 
        and **`locale` = ?**)

它没有注册locale 的给定值。

如果我输入-&gt;where('locale', 'en'),我也会遇到同样的问题,即使我尝试使用原始查询而不是使用 Eloquent 模型。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 你是否尝试过 print_r($locale) 并检查它是否有任何价值
  • ->toSql() 不会返回变量绑定
  • @SR_ 谢谢@
  • @Exprator $locale 不为空,正如我已经提到的,甚至 ->where('locale', 'en') 不返回任何结果。如果我在 mysql 中尝试 sql,它会给我所需的列表,但不是 Laravel 中的查询

标签: sql laravel eloquent laravel-5.3 where-clause


【解决方案1】:

就像 SR_ 在注释中写的那样 toSql() 函数不返回变量绑定。如果你想看看真正的查询是什么样子的,你可以安装 Laravel Debugar 之类的工具:https://github.com/barryvdh/laravel-debugbar

【讨论】:

  • 谢谢。我知道 toSql() 不会返回变量绑定,但是我在 mysql 中编写相同的 sql(应该生成)的方式我得到了过滤列表,而不是在 Laravel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
相关资源
最近更新 更多