【问题标题】:Yii2 - How to get field value from relationYii2 - 如何从关系中获取字段值
【发布时间】:2016-06-24 06:59:32
【问题描述】:

我有一个表,其中包含来自不同来源的不同类型的文本数据,由类型、语言、sourceId 标识并存储在字段text 中。无论如何,是否通过活动记录关系而不是表的对象返回字段text 的值,换句话说,通过关系进行标量查询?

示例:现在我有:

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

想要的方式是:

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

【问题讨论】:

    标签: php activerecord yii2


    【解决方案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.
    

    【讨论】:

    • 好的,在当前状态下它会因条件而中断。
    • 正如我所说的 eager loading 失败
    • 当然,我可以为当前活动记录的 __getMethod 进行重载...真的框架不允许以更漂亮的方式使其变得更漂亮吗?
    • 工作正常 _get 魔术方法,但你的 getter 方法将不再调用。
    【解决方案2】:

    使用一个或多个 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多