我有一个名为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()。
但是,我调试了原始对象,并返回了非空对象。谁能帮助我找到问题。
答案 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();
}
}
现在,您真的不知道如果不记录此异常的原因。