【问题标题】:How to force a PHP variable to be a string?如何强制 PHP 变量为字符串?
【发布时间】:2013-12-13 12:05:50
【问题描述】:

全局上下文

我正在使用Laravel's query builder 和 SQLite 数据库。当然,SQLite 不存在 datetime 类型,我使用 strftime 将时间戳转换为月份或年份值。

我刚刚发现的 SQlite 的微妙之处

以下查询有效(直接使用 SQLite 管理器测试):

SELECT * FROM "articles" 
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = "2013"

这个不行:

SELECT * FROM "articles" 
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = 2013

据我了解,比较必须用字符串来完成。

问题

如何使用 Laravel 的查询生成器解决它?

我已经读过,对于 DB 的特定功能,我必须使用 DB::raw 工具。

$articles = DB::table('articles')
->where(DB::raw('strftime("%Y", articles.date,  "unixepoch", "localtime") '), $annee)
->orderBy('date', 'DESC')->toSql();

但问题是参数$annee 在构建查询时被解释为数字。

我知道 PHP 中没有强制转换,并且解释取决于上下文。有没有办法影响解释?

【问题讨论】:

  • 我对 Laravel 不熟悉,但是你有没有尝试过 (string) $annee 在你现在的位置 $annee ? (是的,PHP 中有强制转换,但仅限于 stringarrayfloatintobject
  • @PetervanderWal (string) $annee 工作正常,谢谢!当我阅读 PHP 手册时,我想我会误解第一行:PHP does not support explicit type definition.
  • 该行意味着变量本身没有被键入,就像在 Java、C# 和其他语言中定义特定类型的变量 (string myVar) 一样。在 PHP 中,$myVar 可以是第一行的 int,并在下一行保存一个字符串。但是,存储在变量中的 属于特定类型,您可以更改该类型(在 PHP 中称为 Type Juggling)。

标签: php jquery sqlite laravel query-builder


【解决方案1】:

类型转换是absolutely supported in PHP

但是一种快速而肮脏的方法是简单地添加一个字符串。

$articles = DB::table('articles')
->where(DB::raw('strftime("%Y", articles.date,  "unixepoch", "localtime") '), "" + $annee)
->orderBy('date', 'DESC')->toSql();

【讨论】:

    【解决方案2】:

    PHP 支持类型转换,但仅限于字符串、数组、浮点数、int 和对象。

    DB::table('articles')
    ->where( 'myColumn', (string) $annee)
    ->orderBy('date', 'DESC')->toSql();
    

    但是一种快速而肮脏的方法是简单地添加一个字符串。

    DB::table('articles')
    ->where('myColumn', "" + $annee)
    ->orderBy('date', 'DESC')->toSql();
    

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2014-07-25
      • 2019-09-22
      • 2021-03-13
      • 2018-02-08
      相关资源
      最近更新 更多