Laravel/vueのちょっとした事の覚え書き。Laravel 8.xで作業した際の情報。
controllerでデータを返す際に正規表現でデータをフィルタリングする方法。subjectのfilterにフィルタリングしたい正規表現が入っていて、subjectのidが一致するデータでtagのデータでフィルタリングする例。
if ($subject->filter) {
try {
$classdata = class::where('subject_id', $subject->id)->with(['items'=> function ($query) use ($subject) {
$query->where('tag', 'regexp', $subject->filter);
}])->orderBy('order')->get();
} catch (\Exception $e) {
$classdata = class::where('subject_id', $subject->id)->with('items')->orderBy('order')->get();
}
} else {
フィルターの正規表現の記述例
単語1を含む 単語1
単語1か単語2を含む 単語1|単語2 ^(?=.*単語1|単語2)
単語1 を含まない ^(?!.*単語1)
単語1または単語2を含まない ^(?!.*単語1|単語2)
単語1と単語2を含まない ^(?!.*単語2.*単語1|.*単語1.*単語2)
単語1を含み単語2を含まない ^(?=.*単語1)(?!.*単語2)
単語1と単語2を含む ^(?=.*単語1)(?=.*単語2)
キーワードがデータに含まれているかチェックする例。
foreach ($sbj->classes()->get() as $cls) {
if (preg_match('/'.$keyword.'/i', $cls->name) ||
preg_match('/'.$keyword.'/i', $cls->description) ||
preg_match('/'.$keyword.'/i', $cls->note)) {
array_push($results, ["name"=>$sbj->name, "sbj"=>$sbj, "idx"=>$idx]);
$idx += 1;
}
}