2017-03-09 2 views
1

「whereNotIn」メソッドを使用しているとき、私は別のテーブルにデータを返すために、このクエリではなく実行するたびに、私はこのエラーを取得するエラー[laravel]

BadMethodCallException in Macroable.php line 74: 
Method whereNotIn does not exist 

クエリ

$shipment_data_unassigned = Shipment::all()->where('status','=', $rulesetname) 
    ->Where('shipment_cycle', '!=', 'closed') 
    ->whereNotIn('ccctadm.Shipment.id',$assigned); 

をしています?

答えて

3

all()を使用すると、クエリが実行され、結果を含むコレクションが返されます。したがって、より多くのメソッドを連結する場合は、SQLクエリーを構築するのではなく、実際にコレクションにチェーンしています。コレクションには、既に返された結果(SQLではなく)をフィルタリングするwhere()がありますが、whereNotIn()メソッドはありません。

これをすべてSQLで実行するにはall()コールを削除し、最後にget()に置き換えます。

$shipment_data_unassigned = Shipment::where('status','=', $rulesetname) 
    ->Where('shipment_cycle', '!=', 'closed') 
    ->whereNotIn('ccctadm.Shipment.id',$assigned)->get(); 
+1

はいあなたが正しい、これが正しい答え – meda

+1

であるが、それは簡単に、あなたが私にGET(間の服従を伝えることができるということでした)と、すべての()メソッドをありがとう!もし時間があるなら。 –

+1

@AhmadzIssa 'all()'メソッドは静的メソッドであり、そのモデルのデータベース内のすべてのレコードを単純に取得するためのショートカットです。制約を追加することはできません。一旦 'Shipment :: where(...)'のような制約を追加すると、querybuilderインスタンスを扱うことになります。クエリを実行して結果を得るには、クエリビルダインスタンスで 'get()'を呼び出す必要があります。 – jfadich