Laravel 属性 在此集合实例上不存在
Laravel Property does not exist on this collection instance
我需要将数据从 Mysq table (Paniers) 传输到另一个 Mysql table (Commandes) 并在传输后删除第一个 table 的数据。
这是我的代码:
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();
您可以通过 findOrFail
和处理 Exception
:
来完成
function Commande(Request $request) {
$pn = (int) $request->input('id');
try {
$pdr = Panier::findOrFail($pn);
$pdr->each(function ($item, $key) {
$user = Commande::create([
'ID_User' => $item->ID_User,
'ID_Piece' => $item->ID_Piece,
'QTE' => $item->QTE,
]);
if ($user && $item->delete()) {
echo 'Commande Confirmée';
}
});
} catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
//@Todo handle error
}
}
根据 laravel 5.0 文件:
Retrieving A Model By Primary Key Or Throw An Exception
Sometimes you may wish to throw an exception if a model is not found. To do this, you may use the firstOrFail method:
如果 $pn 是数组 Panier::find($pn) returns 集合不是实体所以你应该迭代它
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);
如果记录不存在,则returnnull
。然后如果你做 $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
在 Commande
模型中标记为 $fillable = []
。
- 你需要有一个
Panier
模型的基本主键,否则delete()
将无法工作。
我需要将数据从 Mysq table (Paniers) 传输到另一个 Mysql table (Commandes) 并在传输后删除第一个 table 的数据。
这是我的代码:
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();
您可以通过 findOrFail
和处理 Exception
:
function Commande(Request $request) {
$pn = (int) $request->input('id');
try {
$pdr = Panier::findOrFail($pn);
$pdr->each(function ($item, $key) {
$user = Commande::create([
'ID_User' => $item->ID_User,
'ID_Piece' => $item->ID_Piece,
'QTE' => $item->QTE,
]);
if ($user && $item->delete()) {
echo 'Commande Confirmée';
}
});
} catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
//@Todo handle error
}
}
根据 laravel 5.0 文件:
Retrieving A Model By Primary Key Or Throw An Exception
Sometimes you may wish to throw an exception if a model is not found. To do this, you may use the firstOrFail method:
如果 $pn 是数组 Panier::find($pn) returns 集合不是实体所以你应该迭代它
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);
如果记录不存在,则returnnull
。然后如果你做 $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
在Commande
模型中标记为$fillable = []
。 - 你需要有一个
Panier
模型的基本主键,否则delete()
将无法工作。