繁体   English   中英

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

[英]Call to a member function rawFirms() on null

我有一个名为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,
        ]);
    }
}

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

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

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

查看您的代码:

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();
    }
}

现在,您真的不知道如果不记录该异常,为什么会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM