[英]how to get relational table field in yii2 view?
我想在View中獲取關系表字段值,但是關系表可能沒有對應的數據。我可以使用某種方法替換Yii2 View中的php代碼嗎?
// $model->relationTable maybe is null
<?= isset($model->relationalTable)?$model->relationalTable->field:'' ?>
我希望$model->relationalTable->field
可以在$model->relationalTable
為null時工作。我不想if condition
方面考慮很多。
例:
在Model類中:
public function getUser()
{
return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
}
采用:
$customers = Customer::find()
->joinWith('user')
->one();
訪問 :
$customers->user->id;
在這里查看文檔
由於您在視圖頁面中遇到問題,我假設您的問題與在DetailView小部件中顯示數據有關。 下面是代碼示例:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'vehicle_id',
[
'attribute' => 'maker',
'label' => 'Maker Details',
],
[
'attribute' => 'user_id',
'label' => 'Assigned To',
'format' => 'raw',
'value' => function ($model) {
$value = isset($model->user->name) ? $model->user->name : NULL;
return $value;
},
],
],
]) ?>
如果已實現ACL或RBAC,則可以進一步優化代碼,如下所示:
[
'attribute' => 'user_id',
'label' => 'Assigned To',
'format' => 'raw',
'value' => function ($model) {
$value = isset($model->user->name) ? $model->user->name : NULL;
$id = isset($model->user_id) ? $model->user_id : NULL;
if($value && $id){
if(Yii::$app->user->can('user/view')){
$value = Html::a($value, ['user/view', 'id' => $id], ['class' => '']);
}
}
return $value;
},
],
希望能有所幫助。 或提供更多信息/代碼以幫助您了解問題。
如果只想簡化此代碼,則可以使用??
操作員:
<?= $model->relationalTable->field ?? '' ?>
如果需要對其進行編碼:
<?= Html::encode($model->relationalTable->field ?? '') ?>
或者,您可以創建輔助方法,該方法將為您進行此類檢查,然后以這種方式調用它:
<?= $model->getRelationalTableField() ?>
但是,如果可以這樣做,最好的選擇可能是在數據庫級別為相關記錄配置外鍵約束,因此數據庫將確保相關記錄始終存在-那時您不需要任何檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.