簡體   English   中英

如何在yii2視圖中獲取關系表字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM