我在laravel 5.4(库存管理系统)工作,并且在创建新商店时有动态表格表格生成。每个商店都有自己的库存表,其ID为store_8_stock
。我创建了StoreStock
模型,当从控制器设置表时,它无法正常工作:
$storeId = $item['store_id'];
unset($item['barcode']);
TransferList::create($item);
$insertStock = new StoreStock;
$insertStock->setTable('store_'.$storeId.'_stock');
$stock = $insertStock->where('item_id',$item['item_id'])->first();
if($stock != null){
$stock->qty = $stock->qty + $item['qty'];
$stock->save();
}else{
unset($item['item_name']);
unset($item['store_id']);
$insertStock->create($item);
}
$stock = $insertStock->where('item_id',$item['item_id'])->first();
其工作正常,但当$insertStock->create($item);
显示错误时store_stocks table or view not found
$ item包含
array:11 [▼
"barcode" => "8901023007446"
"item_id" => 2
"item_name" => "My new item"
"mrp" => 12.0
"sale_price" => 60.0
"purchase_price" => 50.0
"qty" => "2"
"free_item_name" => ""
"product_vat" => 0.0
"vat_status" => 0
"store_id" => "8"
]
任何人都可以告诉我我的代码有什么问题吗?
答案 0 :(得分:3)
这是因为当您使用create
时会触发newInstance()
方法,并且对象的新实例具有模型中定义的原始属性。
可能你应该使用这样的情况:
$insertStock->fill($item)->save();
让它发挥作用。
答案 1 :(得分:0)
此错误和类似的错误归结为以下原因:
诸如all()之类的某些方法会在后台创建一个新的模型实例。
因此,当创建新实例时,您的setTable消失了。
方法的非静态使用表示这一点:
//wont work
Model::all()
// will work
$model->get()