我想将待处理,发货或取消等查询字符串转换为号码状态。
$q = strtolower($keyword);
if($q == 'pen' or $q == 'pend' or $q == 'pending' ) {
$d = 1;
} elseif($q == 'shi' or $q == 'ship' or $q == 'shipped') {
$d = 2;
} elseif($q == 'can' or $q == 'cancel' ) {
$d = 3;
} else {
$d = 4;
}
$query->whereStatus($d);
当前查询工作正常,但or
太多了。可以缩短方式吗?
答案 0 :(得分:2)
str_is(query, stringToSearch)
可能就足够了:
if (str_is('pen*', $q)) {
$d = 1;
}
否则你可以从数组中解析它们:
$pendingArray = ['pen', 'pend', 'pending'];
if (in_array($q, $pendingArray)) {
$d = 1;
}
答案 1 :(得分:1)
如果这些都是您需要的所有条件,您可以随时使用switch。
$q = strtolower($keyword);
$d = 4;
switch($q) {
case 'pen':
case 'pend':
case 'pending':
case 'pen':
$d = 1;
break;
case 'shi':
case 'ship':
case 'shipped':
$d = 2;
break;
case 'can':
case 'cancel':
$d = 3;
break;
}
$query->whereStatus($d);
如果需要在模型上调用它,可以将它保存到Laravel scope函数中,如下所示:
Laravel模型
然后可以在任何地方干净地调用它:public function scopeSearchStatus($query, $keyword) {
/** All the code above **/
}
SomeModel::searchStatus($keyword);
答案 2 :(得分:1)
你也可以试试这个:
<?php
$q = strtolower($keyword);
$d = (preg_match('/\b(pen|pend|pending)\b/', $q)) ? 1 : 4;
$d = (preg_match('/\b(shi|ship|shipped)\b/', $q)) ? 2 : 4;
$d = (preg_match('/\b(can|cancel|)\b/', $q)) ? 3 : 4;
$query->whereStatus($d);