簡體   English   中英

laravel eloquent select 動態

[英]laravel eloquent select dynamic

我正在嘗試基於if-else條件邏輯動態select列。

 $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();

我無法弄清楚這個問題。 兩者看起來相似,但一個有效,另一個無效。

還有其他方法可以實現這一目標嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM