此集合实例上不存在Laravel Property

问题描述 投票:1回答:3

我需要将数据从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();
php mysql laravel laravel-5 laravel-4
3个回答
2
投票

如果$ 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';
            }        
        }
});

0
投票

当你这样做时:

$pdr = Panier::find($pn);

如果记录不存在,它将返回qazxsw poi。然后,如果你做qazxsw poi它会抛出一个错误。请检查beloew更新:

null

上面的工作你需要:

  1. $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_UserID_Piece模型中标记为QTE
  2. 你需要有$fillable = []模型的基本主键,否则Commande将无效。

0
投票

你可以通过Panier和处理delete()来做到这一点:

findOrFail

根据laravel 5.0文档:

通过主键检索模型或抛出异常

有时,如果找不到模型,您可能希望抛出异常。为此,您可以使用firstOrFail方法:

Exception

© www.soinside.com 2019 - 2024. All rights reserved.