laravel雄辩的选择动态

时间:2020-08-05 15:11:30

标签: php laravel eloquent

我正在尝试根据select条件逻辑来动态if-else列。

 $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 个答案:

答案 0 :(得分:1)

您可以使用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();