我正在工作yii2
。在我的项目中,我使用了一个名为的模块SIM Management
,其中有SIM List
,SIM Issue
和SIM Return
。SIM List
haveissued_to
和returned_by
fields,它告诉用户哪个 sim 已发出并返回给哪个用户。
现在我想做的是,每当SIM
发出areturned_by
时,主表的字段都应设置为空/空。无论之前是否发行过 SIM 卡,此步骤都会实施并起作用。
第二件事是当我想返回 SIMissued_to
时,主表的字段应设置为空/空。此步骤已实现但不起作用。
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
SIM 返回控制器
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 行)
[
'label' => 'Returned By',
'value' => function ($d) {
if(is_object($d->user2))
//return $d->user->name;
return $d->returned_by == '' ? '' : $d->user->username;// line 90 is this
return ' - ';
// return $d->user->name;
},
'filter' => Html::activeDropDownList($searchModel, 'returned_by', \app\models\User::toArrayList(), ['prompt' => "Users", 'class' => 'form-control']),
],
当我设置值时null
,issue_to
我看不出为什么错误显示在returned_by
. 我也检查了数据库表。的值issued_to
是NULL
whilereturned_by
包括user_id
。如果我在数据库表中手动输入用户 ID,则不会生成错误。
任何帮助将不胜感激。
你的关系getUser()
:
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'issued_to']);
}
使用issue_to
字段,如果你$d->user
在第 90 行之前检查,它会给你NULL
. 在访问相关模型属性之前,您必须通过以下方式检查它是否存在:
$d->user ? $d->user->username : NULL
我不知道你想在这个方法中做什么,因为首先你检查if(is_object($d->user2))
,然后你检查$d->returned_by == ''
,然后你使用$d->user
- 为什么?要使用,$d->user2
您应该只使用:
return $d->user2 ? $d->user2->username : null;
没有任何其他检查,喜欢is_object()
或== ''
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句