Yii2 - 如何从关系中获取字段值

时间:2016-06-24 06:59:33

标签: php activerecord yii2

我有一个表格,其中包含来自不同来源的不同类型的文本数据,由type,lang,sourceId标识并存储在字段text中。无论如何通过活动记录关系而不是表格的对象返回,但只有字段text的值通过关系在标量查询中?

示例:现在我有:

$modelName->RelationName->text) //field name storing expexted data, returns string.

理想的方式是:

$modelName->RelationName//text field value returned only.

3 个答案:

答案 0 :(得分:1)

是但是使用lazy loading方法:

将您的关系更新为

public function getRelationName(){
    //Related model Class Name
    //related column name as select
    return $this->hasOne(RelationClass::className() ,['id' => 'id'])->select('name')->scalar();
}

然后获得关系值: -

$modelName->relationName//text field value returned only.

答案 1 :(得分:1)

使用一个或多个getter扩展您的模型,以便使用关系例如:

来重新获得所需的值

在模型中,您需要检索相关数据,您可以构建一个函数来定义raltion(在本例中为hasOne)

 */
public function getRelationName()
{
    return $this->hasOne(ModelOfTheRelation::className(), ['column1' => 'column1', 'EvColumn2' => 'Evcolumn2']);
}

然后你可以使用数据的getter函数

/* Getter f */
public function getRelatioName_field() 
{
    return $this->relationName->field;
}

在视图中,您可以使用

轻松获取数据
echo $model->relationName_field

or in gridview (dataprovider)


 'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'relationName_field',

此链接可能很有用http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

答案 2 :(得分:0)

// in your model
public function getRelationName()
{
    return $this->find()->select('name')->scalar();
}

// in your view
<?= $model->relationName ?>