Php Yii2-将用户id设置为null会导致非对象错误

Php Yii2-将用户id设置为null会导致非对象错误,php,activerecord,null,yii2,Php,Activerecord,Null,Yii2,我正在做yii2。在我的项目中,我使用了一个名为SIM Management的模块,其中有SIM列表、SIM发行和SIM返回SIM列表haveissued_to和returned_by字段,告诉用户哪个SIM被发布并返回给哪个用户 现在我想做的是,每当发出SIM时,主表的返回的字段应设置为null/empty。无论SIM卡之前是否已发出,此步骤都会执行并起作用 第二件事是,当我想返回SIM卡时,主表的issued\u to字段应设置为null/empty。此步骤已实施,但不起作用 SIM卡型号

我正在做
yii2
。在我的项目中,我使用了一个名为
SIM Management
的模块,其中有
SIM列表
SIM发行
SIM返回
SIM列表
have
issued_to
returned_by
字段,告诉用户哪个SIM被发布并返回给哪个用户

现在我想做的是,每当发出
SIM
时,主表的
返回的字段应设置为null/empty。无论SIM卡之前是否已发出,此步骤都会执行并起作用

第二件事是,当我想返回SIM卡时,主表的
issued\u to
字段应设置为null/empty。此步骤已实施,但不起作用

SIM卡型号

下面我有这两个函数

 public static function sim_issue_del($id,$historic)
{
    $sims = Sims::find()->where(['id'=>$id,'historic'=>$historic])->one();
    $sims->returned_by = null;
    return $sims->save();
}

public static function updIssueuser($id,$historic)
{
    $sims = Sims::find()->where(['id'=>$id,'historic'=>$historic])->one();
    $sims->issued_to = null;
    return $sims->save();

}
另外,我还有另外两个函数,它们为我提供了用户的名称

  public function getUser()
{
    return $this->hasOne(User::className(), ['id' => 'issued_to']);
}


public function getUser2()
{
    return $this->hasOne(User::className(), ['id' => 'returned_by']);
}
SIM卡问题控制器

 $m = new SimIssueanceTransaction();
 $m->load(Yii::$app->request->post());
 $m->images = '';
 $m->sim_id = $v;
 $m->issued_by = Yii::$app->user->id;
 $m->issued_at = date('Y-m-d h:i:s');
 $m->imsi = Sims::idToims($v);

 Sims::sim_issue_del($v,$m->historic); // this function works properly 
 if($m->save())
 {
    Sims::sim_user_return($m->sim_id,$m->return_by);
    Sims::updIssueuser($v,$m->historic);// this functions works but on main sim list view the it gives error
    SimIssueanceTransaction::idTodel($v);
 }
SIM卡返回控制器

 $m = new SimIssueanceTransaction();
 $m->load(Yii::$app->request->post());
 $m->images = '';
 $m->sim_id = $v;
 $m->issued_by = Yii::$app->user->id;
 $m->issued_at = date('Y-m-d h:i:s');
 $m->imsi = Sims::idToims($v);

 Sims::sim_issue_del($v,$m->historic); // this function works properly 
 if($m->save())
 {
    Sims::sim_user_return($m->sim_id,$m->return_by);
    Sims::updIssueuser($v,$m->historic);// this functions works but on main sim list view the it gives error
    SimIssueanceTransaction::idTodel($v);
 }
错误是

尝试获取非对象的属性(第90行)

当我将
issue\u的值
null
设置为
时,我看不出为什么
返回的
处会显示错误。我还检查了DB表。颁发给
值为
NULL
,而
返回的
包含
用户id
。如果我在DB表中手动输入用户ID,则不会生成错误


非常感谢您的帮助。

您的关系
getUser()

使用
issue\u to
字段,如果您在第90行之前选中
$d->user
,它将为您提供
NULL
。在访问相关模型属性之前,必须通过以下方式检查它是否存在:

$d->user ? $d->user->username : NULL
我不知道你想在这个方法中做什么,因为首先你检查
如果(is_object($d->user2))
,然后你检查
$d->returned_by==''
,然后你使用
$d->user
-为什么?要使用
$d->user2
,您只需使用:

return $d->user2 ? $d->user2->username : null;
没有任何其他检查,如
is_object()
=''

模型方法需要处理,
您确定在您的模型中允许将“Issuited_to”设置为null还是允许将其赋值?你可以再检查一下。此外,在您的视图中,检查$d->user2是否已设置,然后在视图中使用$d->user。这有点让人困惑,很难说这是一场事故,或者你想做什么。如果你重新命名你的getters也许会更清楚?我对此投了反对票,因为这是作为一个答案发布的,但它并不试图回答这个问题。它可能是一个编辑、一条评论、另一个问题,或者完全删除。你要么更正答案,并在答案中添加正确的解决方案,同时指出错误,然后提出解决方案,而不仅仅是添加代码,要么删除答案,我不会投反对票,因为这会让新手望而却步。
$sims = Sims::find()->where(['id'=>$id,'historic'=>$historic])->one();

if ($sims !== null) {
    $sims->returned_by = null;
    return $sims->save();
}else {
   return false;
}