【问题标题】:PHP - Yii - dynamic properties CActiveRecordPHP - Yii - 动态属性 CActiveRecord
【发布时间】:2015-08-19 04:15:28
【问题描述】:

我的 Person 类具有属性 {property}_{countrycode}。这个类可以有 20 个属性,每个属性都有国家代码。 20x3 = 类中定义的 60 个属性。对于每种语言,我都需要在课堂上手动定义它们。

class Person extends CActiveRecord {

    public $name_sk;
    public $name_cz;     
    public $name_de;

    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    function tableName() {
        return 'person';
    }

}

问题:如何在类中动态生成/定义这些属性?

示例:

public function __construct() {
    $langs = array('sk', 'cz', 'de');
    $properties = array('name', 'surname', 'age');
    foreach($langs as $lang) {
        foreach ($properties as $k => $value) {
            $this->{$value. "_". $lang} = null;
        }
    }
}

【问题讨论】:

  • 如果您将 $this->{$k. "_". $lang} = null; 更改为 $this->{$value. "_". $lang} = null; 会发生什么,因为目前您使用的密钥会导致类似 0_sk 而不是 name_sk
  • 你有没有列:name_sk,name_cz 等在表人???
  • @DanilaGanchar 是的,我有
  • 您应该考虑更改您的设计并将国家/地区添加到他们自己的数据存储中。它会让你的生活变得更轻松。
  • @Ing.MichalHudak 据我了解,您使用 name_de, name_cz 进行翻译?在类中 Person 必须只是属性(如年龄、姓名等)。你能详细解释一下任务吗?我认为社区可以提出更漂亮、更简单的方法。

标签: php yii


【解决方案1】:

在 Yii 1.x 中你 can't。仅当您通过扩展 CActiveRecord._get() 来覆盖它时。

【讨论】:

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