Laravel:无法将`setTable`设置为来自控制器的雄辩模型

时间:2017-04-27 12:36:56

标签: laravel laravel-5 eloquent laravel-5.4

我在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"
]

任何人都可以告诉我我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:3)

这是因为当您使用create时会触发newInstance()方法,并且对象的新实例具有模型中定义的原始属性。

可能你应该使用这样的情况:

$insertStock->fill($item)->save();

让它发挥作用。

答案 1 :(得分:0)

此错误和类似的错误归结为以下原因:

诸如all()之类的某些方法会在后台创建一个新的模型实例。

因此,当创建新实例时,您的setTable消失了。

方法的非静态使用表示这一点:

//wont work
Model::all()

// will work
$model->get()