laravel красноречивый выбор динамический - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь динамически select столбцы на основе if-else условных logi c.

 $records = DB::table('dmf_result_set_assign as rsa')
                ->select(
                    'pmu.s_image_url', 'pmu.r_image_url', 'pmu.r_image_url_main', 'pmu.product_sku', 
                    'pmu.product_name', 'pmu.product_id', 'pmu.ai_result', 
                    'pmu.confidence_score', 'pmu.request_id',
                    if($distinct_only_flag) {
                        DB::raw('DISTINCT pmu.hash_id'),                            
                        'pmu.run_date_id',
                        'pmu.s_product_url',
                        'pmu.r_product_url',
                        'pmu.s_price',
                        'pmu.s_mpn',
                        'pmu.s_upc',
                        'pmu.s_asin',
                        'pmu.s_gtin',
                        'pmu.s_variant_info',
                        'pmu.s_brand',
                        'pmu.s_category',
                        'pmu.s_description'
                    } else {
                        'pmu.hash_id',
                        'fr.filter_name',
                        'rsa.human_verdict', 'rsa.assigned_to', 
                        DB::raw('CONCAT(usr.first_name, " ", usr.last_name) as cloud_user')
                    }
                )
                ->join('dmf_product_match_unmatches as pmu', DB::raw('BINARY `pmu`.`hash_id`'), '=', 'rsa.hash_id')
                ->join('dmf_filter_rules as fr', 'fr.id', '=', 'rsa.filter_rule_id')
                ->leftjoin('dmf_user_tokens as tkn', 'tkn.id', 'rsa.assigned_to')
                ->leftjoin('users as usr', 'usr.id', '=', 'tkn.user_id')
                ->get();

Я получаю эту ошибку:

(1/2) FatalThrowableError
Parse error: syntax error, unexpected 'if' (T_IF)

Но когда я попробуйте, он работает:

$records = DB::table('dmf_result_set_assign as rsa')
                ->select(
                    'pmu.s_image_url', 'pmu.r_image_url', 'pmu.r_image_url_main', 'pmu.product_sku', 
                    'pmu.product_name', 'pmu.product_id', 'pmu.hash_id', 'pmu.ai_result', 
                    'pmu.confidence_score', 'pmu.request_id', 'fr.filter_name',
                    'rsa.human_verdict', 'rsa.assigned_to', DB::raw('CONCAT(usr.first_name, " ", usr.last_name) as cloud_user'),
                    if($distinct_only_flag) {
                        DB::raw('DISTINCT(pmu.hash_id)')
                    } else {
                        'pmu.hash_id'
                    }
                )
                ->join('dmf_product_match_unmatches as pmu', DB::raw('BINARY `pmu`.`hash_id`'), '=', 'rsa.hash_id')
                ->join('dmf_filter_rules as fr', 'fr.id', '=', 'rsa.filter_rule_id')
                ->leftjoin('dmf_user_tokens as tkn', 'tkn.id', 'rsa.assigned_to')
                ->leftjoin('users as usr', 'usr.id', '=', 'tkn.user_id')
                ->get();

Я не мог понять проблему. Оба выглядят одинаково, но один работает, а другой - нет.

Есть ли другой способ достичь этого?

1 Ответ

1 голос
/ 05 августа 2020

вы можете сделать это с помощью метода addSelect:

$records = DB::table('dmf_result_set_assign as rsa')
            ->select(
                'pmu.s_image_url', 'pmu.r_image_url', 'pmu.r_image_url_main', 'pmu.product_sku',
                'pmu.product_name', 'pmu.product_id', 'pmu.ai_result',
                'pmu.confidence_score', 'pmu.request_id',

            )
            ->join('dmf_product_match_unmatches as pmu', DB::raw('BINARY `pmu`.`hash_id`'), '=', 'rsa.hash_id')
            ->join('dmf_filter_rules as fr', 'fr.id', '=', 'rsa.filter_rule_id')
            ->leftjoin('dmf_user_tokens as tkn', 'tkn.id', 'rsa.assigned_to')
            ->leftjoin('users as usr', 'usr.id', '=', 'tkn.user_id');

        if ($distinct_only_flag) {
            $records = $records->addSelect(DB::raw('DISTINCT pmu.hash_id'),
                'pmu.run_date_id',
                'pmu.s_product_url',
                'pmu.r_product_url',
                'pmu.s_price',
                'pmu.s_mpn',
                'pmu.s_upc',
                'pmu.s_asin',
                'pmu.s_gtin',
                'pmu.s_variant_info',
                'pmu.s_brand',
                'pmu.s_category',
                'pmu.s_description');
        } else {
            $records = $records->addSelect('pmu.hash_id',
                'fr.filter_name',
                'rsa.human_verdict', 'rsa.assigned_to',
                DB::raw('CONCAT(usr.first_name, " ", usr.last_name) as cloud_user'))
                    }
        $records = $records->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...