【问题标题】:CakePHP 3 DeleteAll where first 4 letters are not httpCakePHP 3 DeleteAll,其中前 4 个字母不是 http
【发布时间】:2016-04-08 23:07:37
【问题描述】:

我如何用 cakephp 3 创建这个 SQL 语句;

 delete FROM bookmarks WHERE substring(url , 4) != 'http'

我试过了;

$this->Bookmark->deleteAll('substring(Bookmark.url,4) !=' => 'http',false);   

Cakephp 不喜欢 Substring 或 LEFT() 函数

【问题讨论】:

  • "不喜欢" 不是正确的问题描述!尽管目前可能需要回答,但请始终尽可能具体地说明确切会发生什么,以及您期望会发生什么。
  • 另外,可能是 stackoverflow.com/questions/30845997/… 的副本。

标签: sql cakephp cakephp-3.x cakephp-3.2


【解决方案1】:

这个怎么样:

$this->Bookmark->deleteAll([
    'NOT' => ['SUBSTRING(url, 1, 4)' => 'http'],
]);

【讨论】:

  • 这将生成无效的 SQL,因为在 DELETE 查询中,条件键会受到别名剥离的影响,基本上就像“在可能的点之后给我所有东西”,这样你最终会得到类似WHERE NOT (url, 4) = 'http') 的东西。它可以在没有别名的情况下工作,但使用支持自动引用和方言转换的表达式可能是更好/更便携的选择(是的,我知道,SUBSTRING 尚未进行转换)。附带说明,它必须是1, 4,而不仅仅是4
  • 是的,它提出了一个错误的查询,不知道如何修复它。它似乎忽略了子字符串 SQL 函数。输出;从不存在的书签中删除 (url, 4) = 'http'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多