【问题标题】:Searching for a variable number of terms in a MySQL database using Laravel Fluent使用 Laravel Fluent 在 MySQL 数据库中搜索可变数量的术语
【发布时间】:2013-06-14 13:15:16
【问题描述】:

我有以下 MySQL 表:

cases
  id            INT
  diagnosis     TEXT
  description   TEXT

这在 Laravel 中由 LibraryCase 模型表示。

当用户输入搜索词时,我会使用以下内容获得匹配的案例:

// $user_query is the (escaped and purified) user input
$matches = LibraryCase::where('diagnosis', 'LIKE', $user_query)
                      ->or_where('description', LIKE, $user_query)
                      ->paginate(10);

假设我有一个案例,描述是“刺猬索尼克”。如果用户输入 'sonic' 或 'hedgehog' 则返回大小写。如果用户输入“sonic Hedgehog”,则不返回任何内容。这是有道理的,但我不知道如何将$user_query 拆分为单个单词,然后将每个单词添加到我对 LibraryCase 的查询中?

我是在把鼹鼠山变成山吗?看起来这是一件经常发生的事情......

【问题讨论】:

    标签: mysql database laravel fluent eloquent


    【解决方案1】:

    这样的事情可能会奏效:

    $matches = LibraryCase::where('id','>',0);
    
    $user_query = "sonic hedgehog";
    
    foreach(explode(' ', $user_query) as $word)
    {
        $matches = $matches->or_where('diagnosis', 'LIKE', $word);
        $matches = $matches->or_where('description', 'LIKE', $word);
    }
    
    return $matches->paginate(10);
    

    【讨论】:

    • 害怕 :(。我在 $matches 上收到 Call to a member function or_where() on a non-object 错误
    • 抱歉,paginate 就像一个 get(),只是用可能有用的东西进行了编辑。您需要在第一行中添加一个 Query Builder 对象,并且可能有比过滤所有 id 更好的方法来获得一个空对象,但这应该可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多