Member::session_bills()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Siak\Tontine\Model;
4
5
use Illuminate\Database\Eloquent\Builder;
6
use Illuminate\Support\Facades\DB;
7
8
class Member extends Base
9
{
10
    /**
11
     * Indicates if the model should be timestamped.
12
     *
13
     * @var bool
14
     */
15
    public $timestamps = false;
16
17
    /**
18
     * The attributes that are mass assignable.
19
     *
20
     * @var array
21
     */
22
    protected $fillable = [
23
        'def_id',
24
        'round_id',
25
    ];
26
27
    /**
28
     * The "booted" method of the model.
29
     *
30
     * @return void
31
     */
32
    protected static function booted()
33
    {
34
        // Also select fields from the member_defs table.
35
        static::addGlobalScope('def', fn(Builder $query) => $query
36
            ->addSelect(['members.*', 'd.name'])
37
            ->join(DB::raw('member_defs as d'), 'd.id', '=', 'members.def_id'));
38
    }
39
40
    public function def()
41
    {
42
        return $this->belongsTo(MemberDef::class, 'def_id');
43
    }
44
45
    public function round()
46
    {
47
        return $this->belongsTo(Round::class);
48
    }
49
50
    public function subscriptions()
51
    {
52
        return $this->hasMany(Subscription::class);
53
    }
54
55
    public function loans()
56
    {
57
        return $this->hasMany(Loan::class);
58
    }
59
60
    public function libre_bills()
61
    {
62
        return $this->hasMany(LibreBill::class);
63
    }
64
65
    public function session_bills()
66
    {
67
        return $this->hasMany(SessionBill::class);
68
    }
69
70
    public function round_bills()
71
    {
72
        return $this->hasMany(RoundBill::class);
73
    }
74
75
    public function onetime_bills()
76
    {
77
        return $this->hasMany(OnetimeBill::class);
78
    }
79
80
    public function savings()
81
    {
82
        return $this->hasMany(Saving::class);
83
    }
84
85
    public function absences()
86
    {
87
        return $this->belongsToMany(Session::class, 'absences');
88
    }
89
90
    /**
91
     * @param  Builder  $query
92
     * @param  string $search
93
     *
94
     * @return Builder
95
     */
96
    public function scopeSearch(Builder $query, string $search): Builder
97
    {
98
        return $query
99
            ->when($search !== '', fn($qm) => $qm
100
                ->whereHas('def', fn($qd) => $qd
101
                    ->where(DB::raw('lower(name)'), 'like', "%{$search}%")));
102
    }
103
}
104