DynamicScope::apply()   B
last analyzed

Complexity

Conditions 7
Paths 6

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 12
c 1
b 0
f 0
nc 6
nop 2
dl 0
loc 20
rs 8.8333
1
<?php
2
3
namespace Halalsoft\LaravelDynamicColumn;
4
5
use DB;
6
use Illuminate\Database\Eloquent\Builder;
7
use Illuminate\Database\Eloquent\Model;
8
use Illuminate\Database\Eloquent\Scope;
9
10
class DynamicScope implements Scope
11
{
12
13
14
    public function apply(Builder $builder, Model $model)
15
    {
16
        $dynamicColumns = (array) $model->getDynamicColumns();
17
        if (empty($builder->getQuery()->columns)) {
18
            foreach ($dynamicColumns as $column) {
19
                $builder = $builder->select(['*'])->addSelect(DB::raw("COLUMN_JSON($column) as $column"));
20
            }
21
        } elseif (in_array('*', $builder->getQuery()->columns)) {
22
            foreach ($dynamicColumns as $column) {
23
                $builder = $builder->addSelect(DB::raw("COLUMN_JSON($column) as $column"));
24
            }
25
        } else {
26
            foreach ($builder->getQuery()->columns as $column) {
27
                if (in_array($column, $dynamicColumns)) {
28
                    $builder = $builder->addSelect(DB::raw("COLUMN_JSON($column) as $column"));
29
                }
30
            }
31
        }
32
33
        return $builder;
34
    }
35
}