【问题标题】:How to insert SQL column name to Raw Query from PHP/Laravel如何从 PHP/Laravel 将 SQL 列名插入原始查询
【发布时间】:2020-08-12 23:04:25
【问题描述】:

我在 Laravel 中有这段代码:

DB::table('items')
    ->whereRaw("? = 1", ['active'])
    ->get();

在我的数据库表中,我有一个名为 active 的列,我要运行的查询是:

SELECT *
FROM items
WHERE active=1

我的代码失败,因为查询将我的 'active' 参数作为字符串而不是 SQL 语法中的列名传递(这是预期的行为)。 所以,我得到的不是上面的,而是这样的:

SELECT *
FROM items
WHERE "active"=1

知道如何解决这个问题吗?

PS:我尝试了 MySQL 函数 TRIM 但没有成功(也许我没有正确执行)。

【问题讨论】:

  • 为什么不使用DB::table('items')->where('active',1)
  • 我希望它是动态的。实际上,activemonday。我的数据库中的所有天的值都是 1 或 0。所以,我希望能够说“如果今天是星期一并且 monday 在我的表中为 1,请选择此项目”。以我的方式,我将能够使用例如 Carbon 并获取今天的名称并将其动态传递到我的查询中。
  • 为什么不使用DB::table('items')->where($day,1)
  • @ArthurSamarcos 是的,如果我将whereRaw 方法与where 方法链接起来,这将起作用(因为我在whereRaw 中有更多的SQL 代码)但我想知道我是否可以这样做它在whereRaw

标签: php mysql laravel laravel-query-builder


【解决方案1】:

这不是最干净的方法;

$day = 'Monday'; // dynamically Tuesday, Wednesday....
$method = 'where' . $day;

return DB::table('items')->$method('1')->get();

【讨论】:

  • 嗨,谢谢你的回答。这行得通(尽管我真的很想知道如何在 whereRaw 方法中做到这一点,因为那里有更多的 SQL 代码 - 但如果需要,我可以链接这些方法)。你能解释一下为什么会这样吗?例如,$method 是否被 whereMonday 取代?为什么会这样?
  • @padawanTony 是的,它用魔术方法代替它并允许你链接它。这篇文章很好地解释了stackoverflow.com/a/52918904/2188922
猜你喜欢
  • 2016-10-03
  • 1970-01-01
  • 2019-05-31
  • 2018-04-28
  • 2019-02-03
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多