0

次のMySQLテーブルがあります:

cases
  id            INT
  diagnosis     TEXT
  description   TEXT

LibraryCaseこれは、Laravel ではモデルによって表されます。

ユーザーが検索語を入力すると、次を使用して一致するケースが取得されます。

// $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」と入力すると、ケースが返されます。ユーザーが「ソニック ヘッジホッグ」と入力すると、何も返されません。これは理にかなっていますが、$user_query個々の単語に分割して、それぞれを LibraryCase へのクエリに追加する方法がわかりません。

モグラ塚から山を作っていますか?これは結構行われているようですが…

4

1 に答える 1

0

このようなものがうまくいくかもしれません:

$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);
于 2013-06-14T13:27:37.947 に答える