我现在正在学习laravel。我有这个问题。我已经将2个请求参数传递给我的控制器功能。第一个请求参数包含一个对象值,但我将其转换为序列化形式,因为我将保存它的表的字段具有text数据类型。第二个请求参数包含overall_total计算值,并且它具有float数据类型字段。我的问题是,我如何将它存储在我的数据库中?我试图使用create函数,但它返回一个错误。有些论坛不太清楚。我还想不通。有人可以帮我这个吗?这是我的代码。
功能商店
public function store(Request $request){
$serialize_po = serialize($request['purchase_orders']);
$overall_total = $request['overall_total'];
$purchase_orders_save = PurchaseOrder::create(?);
}
如何使用create保存2个参数?还是有其他方法可以保存它吗?
$request['purchase_orders']
内部如下图所示
$request['overall_total']
内部只是一个数字。例如。 310
我的数据库表结构如下所示
答案 0 :(得分:2)
Laravel中的create()
函数接受一个关联数组,其中数组键是列的名称,数组值是列的对应值。
所以你的商店功能可能如下所示:
public function store(Request $request){
$serialize_po = serialize($request['purchase_orders']);
$overall_total = $request['overall_total'];
$purchase_orders_save = PurchaseOrder::create([
'purchase_orders' => $serialize_po,
'overall_total' => $overall_total
]);
}
另外需要注意的是,作为安全预防措施,Laravel不允许以这种方式填充模型的属性。您需要使用$fillable
属性在模型中列出允许通过传入关联数组来填充哪些键。如果你没有,你可能会得到MassAssignmentException
。
因此,在您的模型中,您可能需要至少具备以下内容:
class PurchaseOrder extends Model
{
protected $fillable = ['purchase_orders', 'overall_total'];
}
有更多选项和方法可以做到这一点,但这是基本和典型的情况。
有关使用create()
方法和处理质量分配的更多信息,请参阅文档:https://laravel.com/docs/5.2/eloquent#mass-assignment
答案 1 :(得分:2)
考虑到您的型号名称是PurchaseOrder,您首先需要创建它的新实例。然后,使用save方法。
public function store(Request $request)
{
$purchaseOrder = new PurchaseOrder;
$purchaseOrder->overall_total = $request['overall_total'];
$purchaseOrder->purchase_orders = serialize($request['purchase_orders']);
$purchaseOrder->save();
}
有关详细信息,请参阅https://laravel.com/docs/5.2/eloquent#basic-inserts。
答案 2 :(得分:1)
这样的事情:
DB::table('purchaseOrder')->insert(
['purchase_orders' => $serialize_po,'overall_total' => $overall_total]
);
如果您想了解更多内容,请参阅doc。