Completed
Push — master ( 4f00d5...2afce4 )
by John
29s queued 13s
created

LikeScope::scopeOrLike()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 1
c 1
b 1
f 0
nc 1
nop 5
dl 0
loc 3
rs 10
1
<?php
2
3
namespace App\Models\Traits;
4
5
trait LikeScope
6
{
7
    /**
8
     * @param   \Illuminate\Database\Eloquent\Builder $query
9
     * @param     $column
10
     * @param     $value
11
     * @param     $side
12
     * @param     $isNotLike
13
     * @param     $isAnd
14
     * @return    \Illuminate\Database\Eloquent\Builder
15
     */
16
    public function scopeLike($query, $column, $value, $side='both', $isNotLike=false, $isAnd=true)
17
    {
18
        $operator=$isNotLike ? 'not like' : 'like';
19
20
        $escape_like_str=function($str) {
21
            $like_escape_char='!';
22
23
            return str_replace([$like_escape_char, '%', '_'], [
24
                $like_escape_char.$like_escape_char,
25
                $like_escape_char.'%',
26
                $like_escape_char.'_',
27
            ], $str);
28
        };
29
30
        switch ($side) {
31
            case 'none':
32
                $value=$escape_like_str($value);
33
                break;
34
            case 'before':
35
            case 'left':
36
                $value="%{$escape_like_str($value)}";
37
                break;
38
            case 'after':
39
            case 'right':
40
                $value="{$escape_like_str($value)}%";
41
                break;
42
            case 'both':
43
            case 'all':
44
            default:
45
                $value="%{$escape_like_str($value)}%";
46
                break;
47
        }
48
49
        return $isAnd ? $query->where($column, $operator, $value) : $query->orWhere($column, $operator, $value);
50
    }
51
52
    public function scopeOrLike($query, $column, $value, $side='both', $isNotLike=false)
53
    {
54
        return $query->like($column, $value, $side, $isNotLike, false);
55
    }
56
57
    public function scopeNotLike($query, $column, $value, $side='both', $isAnd=true)
58
    {
59
        return $query->like($column, $value, $side, true, $isAnd);
60
    }
61
62
    public function scopeOrNotLike($query, $column, $value, $side='both')
63
    {
64
        return $query->like($column, $value, $side, true, false);
65
    }
66
}
67