2017-03-09 242 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查询。集合有一个where()过滤已经返回的结果(不是SQL),但它们没有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()和all()方法之间的区别吗?如果你有时间。 –

+1

@AhmadzIssa'all()'方法是一种静态方法,它是简单地获取该模型数据库中每条记录的快捷方式。你不能添加任何约束。一旦添加了像'Shipment :: where(...)'这样的约束,您现在正在使用一个查询构建器实例。为了执行查询并获得结果,您需要在查询生成器实例上调用'get()'。 – jfadich