Php Laravel 5.2在同一页面上更新雄辩的主控细节
这里是两个模型,刀片页面和控制器,我在Laravel 5.2中实现了主控详细信息页面。我想知道我如何能更新细节部分回到数据库 1) 主模型Php Laravel 5.2在同一页面上更新雄辩的主控细节,php,laravel,Php,Laravel,这里是两个模型,刀片页面和控制器,我在Laravel 5.2中实现了主控详细信息页面。我想知道我如何能更新细节部分回到数据库 1) 主模型 namespace App; use Illuminate\Database\Eloquent\Model; class Order extends Model { protected $fillable = [ 'id', 'name', 'created_at', 'updat
namespace App;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
protected $fillable = [
'id',
'name',
'created_at',
'updated_at'
];
public function detail()
{
return $this->hasMany('App\OrderDetail','fid','id');
}
public function getDetailCountAttribute()
{
return $this->hasMany('App\OrderDetail','fid','id')->count();
}
public static function boot()
{
parent::boot();
// cause a delete of a product to cascade to children so they are also deleted
static::deleted(function($order)
{
$order->detail()->delete();
});
}
}
2) 细节模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class OrderDetail extends Model
{
protected $fillable = [
'id',
'oid',
'item',
'total',
'created_at',
'updated_at'
];
}
3) OrderDetail部分中的master detail页(部分)应用jQuery在表中动态添加项
<body>
<h1>Order Edit</h1>
{!! Form::model($order,['method' => 'PATCH','route'=>['order.update',$order->id]]) !!}
<div class="form-group">
ORDER ID:{{$order->id}}
<br /><br />
</div>
<div class="form-group">
{!! Form::label('order Name', 'ORDER NAME:') !!}
{!! Form::text('name',$order->name,['class'=>'form-control']) !!}
</div>
<div class="form-group">
<!--order detail part start-->
<br />
{{ Form::select('productInput', $product,'',['ID'=>'productInput']) }}
{{ Form::number('productQtyInput','',['class'=>'form-control','style'=>'width:250px','ID'=>'OrderQtyInput']) }}
{{ Form::button('Add',['onclick'=>'product_add();']) }}
<br />
<table class="table table-striped table-bordered table-hover" style="width:30%;" border=1 id="TblOrderList" >
<thead>
<tr class="bg-info" id="ingHEADER">
<th width=2%>PRODUCTID</th>
<th width=5% >PRODUCT</th>
<th width=5%>QTY</th>
<th width=5% colspan=2>COMMAND</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<!--order detail part end-->
</div>
<div class="form-group">
{!! Form::submit('Update', ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
</body>
<script type="text/javascript">
function product_add(){
var ingID =$( "#productInput").val();
var ingName =$( "#productInput option:selected").text();
var ingQty =$("#productQtyInput").val();
var rowCount = $('#TblOrderList .ingData').length;
rowCount++;
var outHTML =
'<tr class="ingData" id="ingRow' + rowCount + '">'
+ '<td><div id="ingID' + rowCount + '">' + ingID + '</div></td>'
+ '<td><div id="ingName' + rowCount + '">' + ingName + '</div></td>'
+ '<td><input type="number" id="ingQTY' + rowCount + '" value="' + ingQty + '"/></td>'
+ '<td>'
+ '<button class="OrderREMOVE" type="button">DELETE</button>'
+ '<button class="OrderUP" type="button">up</button>'
+ '<button class="OrderDOWN" type="button">down</button>'
+ '</td>'
+ '</tr>';
$('#TblOrderList tr:last').after(outHTML);
$('#ingUNIT' + rowCount)
.find('option[value="' + ingUnit + '"]')
.prop('selected', 'selected');
}
</script>
您有两个选项来实现这一点:
[]
,以使该输入成为一个数组。实际上,您的输入上甚至没有名称,因此您的控制器将永远不会收到该输入的值,因为它们不在POST变量上
所以你需要一些类似的东西:
<input type="number" name="qty[]" id="ingQTY' + rowCount + '" value="' + ingQty + '"/>
这应该让你知道你需要什么。当然,您可能应该提交订单详细信息id,并在控制器上检查该id是否存在,并且仅在该值存在时更新详细信息。如果不存在,请创建详细信息
我还发现您缺少了一些订单详细信息的输入(在javascript部分),因为模型有一个
item
属性,并且您似乎没有为该列创建输入。谢谢,是的,我只是介绍了我的代码试图做什么的一般概念。你的回答给了我下一步的实施方向。
<input type="number" name="qty[]" id="ingQTY' + rowCount + '" value="' + ingQty + '"/>
public function update(Request $request, $id)
{
// Update the order
$orderUpdate = $request->all();
$order = Order::find($id);
$order->update($orderUpdate);
// Go through all qty (that are related to the details, and create them)
foreach ($postValues['qty'] as $qty) {
$order->detail()->create([
'oid' => $order->id,
'total' => $qty,
]);
}
return redirect('order');
}