bugfix> php > 投稿

私はうまくいくように見える比較的単純な変数セットを持っていますが、問題を引き起こすのはそれをどのように出力しているのだと思います。

現時点では、コントローラーで次のものを使用しています。

   if(empty($_GET['direction'])){
        $direction = "'LIKE', '%'";
        } else if ($_GET['direction'] === 'Inbound') {
        $direction = "'>', 1";
        } else if ($_GET['direction'] === 'Outbound'){
        $direction = "'=', 1";
    }

今、私は事実の後に$directionをdd'dしました、そして、すべてのテストは$_GET ['direction']の値が与えられると正しい変数オプションを正確に選択したことを示します。

私の問題は、そこに出力するか、以下のセクションで結果を入力するかです。

$manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')  
        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction],
                ])
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();

さて、先に進む前に、すべてがここで正しく動作し、しばらくの間、 carrierOrigin および $direction 問題があることを追加します。

たとえば、 direction を離れる場合ページのフィールドが空の場合、$direction変数を「 'LIKE'、 '%'」に設定します。

残念ながら、where句では、結果が返されないため、これは適切に送信されません。ただし、この行を変更した場合のテストとして:

['carrierOrigin', $direction],

['carrierOrigin','LIKE','%'],

すべての結果が正常に返されます。出力をフォーマットするか、出力を送信する別の方法がありますか?

回答 1 件
  • 2番目と3番目のwhere引数として文字列を渡します。コントローラーでこれを使用します。

    if(empty($_GET['direction'])){
        $direction = ['LIKE', '%'];
        } else if ($_GET['direction'] === 'Inbound') {
        $direction = ['>', 1];
        } else if ($_GET['direction'] === 'Outbound'){
        $direction = ['=', 1];
    }
    
    

    次にクエリで:

    $manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')  
        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction[0], $direction[1],
                ])
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();
    
    

あなたの答え