Вызов функции-члена rawFirms () в null - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть модель под названием Raw, в которой есть много RawFirms

class Raw extends Model
{

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

и в моем Сеидере есть эта часть кода:

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(), отображается ошибка

Вызов функции-члена rawFirms () со значением NULL.

Однако я отладил необработанный объект, и он возвратил ненулевой объект. Может кто-нибудь помочь мне найти проблему.

1 Ответ

0 голосов
/ 04 сентября 2018

Глядя на ваш код:

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

Теперь вы действительно не знаете, почему произошло это исключение, если вы не регистрируете его.

...