[Laravel] 배열 문자열을 재정렬하고 읽어들이는 역할 영역 기능

6476 단어 LaravelMySQLtech

개시하다

VARCHAR 다음 형식으로 등록된 시스템에 검색 기능을 추가할 때의 대응 방법
["40","41","42","43","44","45","46","47"]

방법


모델 내에서 공통화하고 싶으므로 Scope화


https://readouble.com/laravel/8.x/ja/eloquent.html FIND_IN_SET: 첫 번째 매개 변수의 값이 두 번째 매개 변수에 포함될 때 범위를 되돌려줍니다?: 사용자의 입력 값을 사용하기 때문에 プリペアドステートメント로 귀속합니다replace: 지정カラム名,置換元文字列,置換先文字列https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set
https://www.tailtension.com/mysql/1467/
"FIND_IN_SET(?,replace(replace(replace({$target_column},'[',''),']',''),'\"',''))", $item);
User.php
public function scopeWhereInByArray($query, $target_column, $ids)
{
    $query->where(function ($subQuery) use ($ids, $target_column) {
        foreach ($ids as $item) {
            $subQuery->orWhereRaw("FIND_IN_SET(?,replace(replace(replace({$target_column},'[',''),']',''),'\"',''))", $item);
        }
    });
}

Scope 로직 활용


UserController.php
// クエリを生成
$query = User::query();

// 都道府県検索
if ($param->getPrefIds()) {
    $query->whereInByArray('pref', $param->getPrefIds());
}

최후


읽어주셔서 감사합니다.
가능하면 기사를 쓰는 격려가 될 테니 참고 가치가 있는 분들도 잘 부탁드립니다!

좋은 웹페이지 즐겨찾기