这里有两个模型,分别是blade页面和控制器,用于在Laravel 5.2中实现主从页面。我想知道如何将详细信息部分更新回数据库。
1)主模型
1)主模型
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) Detail Model
namespace App;
use Illuminate\Database\Eloquent\Model;
class OrderDetail extends Model
{
protected $fillable = [
'id',
'oid',
'item',
'total',
'created_at',
'updated_at'
];
}
3) The master detail page (partial), in OrderDetail part, jQuery applied to dynamically add items in the table.
<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>
4) Finally the update function in OrderController, currently it can update the master part. But I am not sure how to loop each detail and update them in same function.
public function update(Request $request, $id)
{
//
$orderUpdate = $request->all();
$order = Order::find($id);
$order->update($orderUpdate);
return redirect('order');
}