在null

时间:2018-09-03 13:33:55

标签: php laravel laravel-5 eloquent laravel-5.6

我有一个名为Raw的模型,其中有许多RawFirms

class Raw extends Model
{

    public function rawFirms(){
        return $this->hasMany(RawFirm::class);
    }
}

在我的Seeder中,我有以下代码部分:

try{
    $raw = $raw_children->raws()->create([
        'name'=>$leaf,
        'quantity'=>0
     ]);
    // if(!$raw){
    //     throw new \Exception;
    // }
}
catch(Illuminate\Database\QueryException $e){
    $error_code = $e->errorInfo[1];
    if($error_code == 1062){
        $raw = Raw::where('name', $l)->first();
    }
}

$position_id = $faker->numberBetween(1, 432);
//creating rawFirm for three types
if($firm_id != ''){
    foreach(range(0, 2) as $type){
        $raw->rawFirms()
        ->create([
            'firm_id'=>$firm_id,
            'position_id'=>$position_id,
            'quantity'=>0,
            'type'=>$type,
        ]);
    }
}

当我想通过rawFirm创建$raw->rawFirms()时,显示错误

  

在null上调用成员函数rawFirms()。

但是,我调试了原始对象,并返回了非空对象。谁能帮助我找到问题。

1 个答案:

答案 0 :(得分:0)

查看您的代码:

catch(Illuminate\Database\QueryException $e){ 

应替换为:

catch(\Illuminate\Database\QueryException $e){

(注意反斜杠前)或可能更笼统

catch(\Exception $e){

如果您想捕获任何类型的异常。

您还使用了:

$error_code = $e->errorInfo[1];
if($error_code == 1062){
    $raw = Raw::where('name', $l)->first();
}

但是如果$ error_code是不同的怎么办?然后,您无需将$raw设置为任何值。

另外,如果您捕获到此异常,则可能应该这样记录它:

catch(\Illuminate\Database\QueryException $e){
    \Log::error($e);
    $error_code = $e->errorInfo[1];
    if($error_code == 1062){
        $raw = Raw::where('name', $l)->first();
    }
}

现在,您真的不知道如果不记录此异常的原因。