我需要将数据从Mysql表(Panniers)传输到另一个Mysql表(Commandes)并在传输后从第一个表中删除数据。
这是我的代码:
function Commande(Request $request) {
$pn = $request->input('id');
$pdr = Panier::find($pn);
$user = Commande::create([
'ID_User' => $pdr->ID_User,
'ID_Piece' => $pdr->ID_Piece,
'QTE' => $pdr->QTE,
]);
if($user){
if($pdr->delete())
{
echo 'Commande Confirmée';
}
}
}
我收到此错误:
"Property [ID_User] does not exist on this collection instance."
如果我这样做它可以工作,但不是获取所有数据我只获得第一行。我需要获得所有数据!
$pdr = Panier::find($pn)->first();
如果$ pn是数组Panier :: find($ pn)返回集合而不是实体,那么你应该迭代它
Panier::find($pn)->each(function($pdr){
$user = Commande::create([
'ID_User' => $pdr->ID_User,
'ID_Piece' => $pdr->ID_Piece,
'QTE' => $pdr->QTE,
]);
if($user){
if($pdr->delete())
{
echo 'Commande Confirmée';
}
}
});
当你这样做时:
$pdr = Panier::find($pn);
如果记录不存在,它将返回qazxsw poi。然后,如果你做qazxsw poi它会抛出一个错误。请检查beloew更新:
null
上面的工作你需要:
$pdr->ID_User
,<?php
function Commande(Request $request) {
$pn = $request->input('id');
$pdr = Panier::find($pn);
// Model not found
if(!$pdr){
return response()->json(['msg' => 'No records found']);
}
// Create new Commande
$user = Commande::create([
'ID_User' => $pdr->ID_User ?? 'default_value_for_ID_User',
'ID_Piece' => $pdr->ID_Piece ?? 'default_value_for_ID_Piece',
'QTE' => $pdr->QTE ?? 'default_value_for_QTE'
]);
// If user is created
if($user){
// Delete Panier
$pdr->delete();
return response()->json(['msg' => 'Success']);
}
return response()->json(['msg' => 'Could not create new Commande']);
}
和ID_User
在ID_Piece
模型中标记为QTE
。$fillable = []
模型的基本主键,否则Commande
将无效。你可以通过Panier
和处理delete()
来做到这一点:
findOrFail
根据laravel 5.0文档:
通过主键检索模型或抛出异常
有时,如果找不到模型,您可能希望抛出异常。为此,您可以使用firstOrFail方法:
Exception