我正在尝试根据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();
我不知道这个问题。两者看起来很相似,但一个可行,而另一个却不可行。
还有其他方法可以实现吗?
答案 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();