PHP
SQL
laravel
検索
サブクエリ

DBには姓・名を別で登録しているのに、検索はフルーネーム部分一致で行いたいときの実装(一部)

Laravelで実装したもの。
サブクエリを使い、フルネーム項目をつくって対応。

検索ワードを配列につっこむ

        if ($conditions->user_name) {
            $whereInfo["user_name"] = $conditions->user_name;
        }

配列に入ってる検索ワードで検索

        if (isset($infoWhere["user_name"])) {
            $name = $infoWhere["user_name"];
            $ids = $this->getUserIdsByName($name);
            $query->whereIn("id", $ids);
            unset($infoWhere["user_name"]);
        }

SQLのサブクエリを使ってうまいこと検索する

    protected function getUserIdsByName($name)
    {
        $name = "%$name%";
        $sql = <<<SQL
select
  *
from (
  select
    *,
    last_name || first_name as full_name
  from m_user_info
) mui
where first_name LIKE ?
OR last_name LIKE ?
OR full_name LIKE ?
SQL;

        $result = DB::select($sql, [$name, $name, $name]);
        $rtn = [];
        foreach ($result as $row) {
            $rtn[] = $row->id;
        }
        return $rtn;
    }