2017-03-03 19 views
3

First Laravelのプロジェクトがあるかどうかを確認します。私はそのバーコードのレコードがあるかどうかを調べるコントローラ関数を持っています。レコードを挿入しない場合はいの場合はカウントに1を加えます。Laravel:MySQLクエリに結果が

public function sellmode(Request $request){ 
    $barcode=$request->barcode; 
    $test = DB::select('select count from sellmode where barcode = ?', [$barcode]); 
    $row_cnt = mysqli_num_rows($test); 
    if ($row_cnt == 0) { 
     Debugbar::info('Új sor'); 
     DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
    } else { 
     Debugbar::info('Meglévő frissítése'); 
     DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
    } 
    return view(sell); 

}

私はそれを試したときには、次のエラーがあった:

ErrorException in SellController.php line 17: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given

私が間違っていましたか?

+0

ここでは、mysqli_num_rowsまたはmysqli関連の関数を使用しないでください。 LaravelはPDOを使用します。引数のために返された行の数を調べるには、結果の配列の値の数を数えるだけです... '$ row_cnt = count($ test);' – Jonathon

答えて

3

Laravelクエリビルダでただmysql_num_rowsになることはできません。 Laravelクエリービルダーはcollectionを返しますので、isEmpty関数を使用して結果があるかどうかを調べることができます。

if ($test->isEmpty()) { 
    Debugbar::info('Új sor'); 
    DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
} else { 
    Debugbar::info('Meglévő frissítése'); 
    DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
} 

Laravelバージョン5.3より前のバージョンを使用している場合、クエリビルダーは配列を返します。このケースでは、

if (count($test) === 0) { 
    Debugbar::info('Új sor'); 
    DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
} else { 
    Debugbar::info('Meglévő frissítése'); 
    DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
} 
+0

ありがとうございます。別のエラー: "SellController.php行のFatalThrowableError 17:配列のメンバ関数isEmpty()への呼び出し" – Feralheart

+0

この場合、5.3より低いLaravelバージョンを使用している可能性があります。私はこれらのバージョンの解決策で自分の答えを更新しました。 – Jerodev

+0

私は5.3を使っていると思っていましたが、今は 'php artisan --version'を実行しました。出力は 'Laravel Framework 5.4.13'でした。 SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。エラーが発生しました。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が1行目(SQL:o)の「o」の近くで使用するようにしてください – Feralheart

2

モデルを作成し、DBを照会するためにそれを使用することをお勧めだろう返される行数を知るために、このアレイ上のPHP count機能を使用することができます。多分このような何か(私の意見では簡単です):

$sellMode = SellMode::where('barcode', $barcode)->get(); 
if($sellMode->isEmpty()){ 
    Debugbar::info('Új sor'); 
    $sellMode = SellMode::create(['barcode' => $barcode, 'count' => 1]); 
} 
else{ 
    Debugbar::info('Meglévő frissítése'); 
    $sellMode->increment('count'); 
} 
+0

使用しているバージョンはわかりませんが、https:/ /laravel.com/docs/5.4/eloquent –