Completed
Push — master ( 3f8b6c...ed0e69 )
by
unknown
06:31
created

LocaleFilters::localeFilters()   A

Complexity

Conditions 5
Paths 10

Size

Total Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 9.1448
c 0
b 0
f 0
cc 5
nc 10
nop 2
1
<?php
2
3
namespace BBSLab\NovaTranslation\GraphQL\Directives\Traits;
4
5
trait LocaleFilters
6
{
7
    /**
8
     * Filter model by locale filters.
9
     *
10
     * @param  string  $modelClass
11
     * @param  array  $args
12
     * @return \Illuminate\Database\Eloquent\Builder
13
     */
14
    protected function localeFilters(string $modelClass, array $args)
15
    {
16
        $isos = [];
17
        if (isset($args['localeFilters'])) {
18
            if (isset($args['localeFilters']['locale'])) {
19
                $isos[] = $args['localeFilters']['locale'];
20
            }
21
            if (isset($args['localeFilters']['locales'])) {
22
                $isos = array_merge($isos, $args['localeFilters']['locales']);
23
            }
24
        }
25
26
        /** @var \Illuminate\Database\Eloquent\Model $model */
27
        $model = new $modelClass;
28
        $table = $model->getTable();
29
30
        $query = $modelClass::query()
31
            ->select($table.'.*', 'locales.iso AS locale', 'translations.translation_id')
32
            ->join('translations', $table.'.'.$model->getKeyName(), '=', 'translations.translatable_id')
33
            ->join('locales', 'translations.locale_id', '=', 'locales.id')
34
            ->where('translations.translatable_type', '=', $modelClass)
35
            ->where('locales.available_in_api', '=', true);
36
37
        if (! empty($isos)) {
38
            $query = $query->whereIn('locales.iso', $isos);
39
        }
40
41
        return $query;
42
    }
43
}
44