有这样的表格。这是一个更新表单,我只需要在购物车中更新qty foreach产品。 但我试图爆炸每个结果,而不是工作...它返回object2array转换错误...它第一次我得到这个错误如何我可以在DB中保存?
class Mutable(object): # Example class (unchangeable).
def __init__(self):
self.attr0 = 0
self.attr1 = 1
def __repr__(self):
return str(self.__dict__)[1:-1]
class MonitoredMutable(Mutable):
_get_callback = _set_callback = lambda *_: None # no-op placeholders
def __init__(self, get_callback, set_callback):
# use superclass to avoid infinite recursion when setting attributes
super_delegate = super(MonitoredMutable, self)
super_delegate.__init__()
super_delegate.__setattr__('_get_callback', get_callback)
super_delegate.__setattr__('_set_callback', set_callback)
def __setattr__(self, name, value):
super(MonitoredMutable, self).__setattr__(name, value)
self._set_callback(name, value) # write notification
def __getattr__(self, name):
self._get_callback(name) # read notification
return super(MonitoredMutable, self).__getattr__(name, value)
def __repr__(self): # optional
# override to only display the public attributes of the instance
public_attrs = {k:v for k,v in self.__dict__.items()
if not k.startswith('_')}
# assuming single inheritance (only one base class)
base_classname = self.__class__.__bases__[0].__name__
return base_classname + ': ' + (str(public_attrs)[1:-1] if public_attrs
else 'No pub attributes')
class Foo(object):
def __init__(self):
self._mutable = MonitoredMutable(self._get_callback, self._set_callback)
def _get_callback(self, name):
print('mutable.' + name + ' was read')
def _set_callback(self, name, value):
print('mutable.' + name, 'was set to', value)
@property
def mutable(self):
return self._mutable
@mutable.setter
def mutable(self, attr_value_pair):
attribute, value = attr_value_pair
setattr(self._mutable, attribute, value)
bar = Foo()
print(bar.mutable) # -> Mutable: 'attr0': 0, 'attr1': 1
bar.mutable = ('attr0', 5) # -> mutable.attr0 was set to 5
bar.mutable = ('attr1', 10) # -> mutable.attr1 was set to 10
print(bar.mutable) # -> Mutable: 'attr0': 5, 'attr1': 10
# These now work
bar.mutable.attr0 = 1 # -> mutable.attr0 was set to 1
bar.mutable.attr1 = 0 # -> mutable.attr1 was set to 0
print(bar.mutable) # -> Mutable: 'attr0': 1, 'attr1': 0
这是我的控制者:
<form action="update">
@foreach($products as $product)
<input type="text" name="products[]">
<input type="text" name="qty[]">
@endforeach
<input type="submit" calss="btn btn-primary">
提前致谢。
答案 0 :(得分:-1)
您为数据库中存在的每个$carreli
执行迭代,但是您永远不会保存该值。
Route::post('aggiorna', function() {
$quantita = Input::all();
$carrelli = \App\Models\Carrello::where('entry_by', \Session::get('uid'))->get();
$quantita = explode(',', $quantita);
$i = 0;
foreach($carrelli as $carrello) {
$carrello->quantita = $quantita[$i];
$i = $i++;
$carrelo->save();
}
return Redirect::to('carrello');
});
在更新值后添加 $carrelo->save();
,以便将其保存在db上。
使用Input::all();
时也要小心。这意味着您的数据阵列包含产品和数量。我建议使用以下代码:
Route::post('aggiorna', function() {
$quantita = Input::get('qty');
$products = Input::get('products');
$carrelli = \App\Models\Carrello::where('entry_by', \Session::get('uid'))->get();
$quantita = explode(',', $quantita);
$products = explode(',', $products);
$i = 0;
foreach($carrelli as $carrello) {
$carrello->quantita = $quantita[$i];
$carrello->products = $products[$i];
$i = $i++;
$carrelo->save();
}
return Redirect::to('carrello');
});
然而,由于我不知道你想要达到的目的,我在这里发布了两个解决方案。