2017-06-11 8 views
0

保留、出荷、またはキャンセルのような照会文字列を番号ステータスに変換したいと考えています。不完全な入力を照会するにはどうすればいいですか

$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です。短縮することは可能ですか?

答えて

2

str_is(query, stringToSearch)はおそらく十分でしょう:

if (str_is('pen*', $q)) { 
    $d = 1; 
} 
エルス

使用すると、配列からそれらを解析することができます:

$pendingArray = ['pen', 'pend', 'pending']; 
if (in_array($q, $pendingArray)) { 
    $d = 1; 
} 
1

これらはあなたが必要とするすべての条件であれば、あなたは常にswitchを使用することができます。 Laravelモデルに

public function scopeSearchStatus($query, $keyword) { 
    /** All the code above **/ 
} 

そして、それが呼び出すことができます。

$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機能に保存することができあなたが好きな場所にきれいに:

SomeModel::searchStatus($keyword); 
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); 
関連する問題