[英]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.