如何检查模型是否具有特定属性?

Vib*_*haJ 4 php oop object yii

我想创建一个新的模型类,它将在所有其他类中扩展.我想在admin为addind/edit任何记录时自动设置一些字段.即createdDate,createdIp,updatedDate,updatedIp..etc.

现在我的问题所有领域都不会在所有模型中都很常见.所以我想检查对象是否有createdDate属性然后只设置它的值.如果没有条件且模型没有创建日期成员那么它将生成错误.下面是我正在尝试的代码.但它没有用.

public function beforeSave()
{ 
            if(isset($this->createdDate))
                    die('this model have createdDate field');
            else
                    die('this model does not have createdDate field');
}
Run Code Online (Sandbox Code Playgroud)

模型可能不直接,它可以自动扩展数据库表的相关类.下面是打印对象.createdDate字段位于私有列表中.

如果我使用var_dump(property_exists($this, 'createdDate')); 它是假的.

AdvertisementRate Object
(
    [bannerLocation_search] => 
    [bannerType_search] => 
    [_md:private] => CActiveRecordMetaData Object
        (
            [tableSchema] => CMysqlTableSchema Object
                (
                    [schemaName] => 
                    [name] => tbl_advertisement_rate
                    [rawName] => `tbl_advertisement_rate`
                    [primaryKey] => advertisementRateId
                    [sequenceName] => 

                    [columns] => Array
                        (
                            [createdDate] => CMysqlColumnSchema Object
                                (
                                    [name] => createdDate
                                    [rawName] => `createdDate`
                                    [allowNull] => 
                                    [dbType] => datetime
                                    [type] => string
                                    [defaultValue] => 
                                    [size] => 
                                    [precision] => 
                                    [scale] => 
                                    [isPrimaryKey] => 
                                    [isForeignKey] => 
                                    [autoIncrement] => 
                                    [_e:private] => 
                                    [_m:private] => 
                                )
Run Code Online (Sandbox Code Playgroud)

请帮我添加这个逻辑.


是的.. CActiveRecord扩展到我的班级.

MasterAdmin.php

class MasterAdmin extends CActiveRecord
{
    public function beforeSave()
    { 
                echo '<pre>';
                var_dump(property_exists($this, 'createdDate')); 
                exit;
    }
}
Run Code Online (Sandbox Code Playgroud)

user.php的

class User extend MasterAdmin 
{
   // So whenever any record added or edited, beforeSave will be called and i can autoset createddate value.

}
Run Code Online (Sandbox Code Playgroud)

xbo*_*nez 5

property_exists() 就是你要找的。

这样,如果该属性存在但设置为NULL,则上述函数将如您所料返回 true,而isset()将返回 false 使您相信该属性不存在。

为我工作。查看示例


Ale*_*lex 5

你使用的是activerecord吗?

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#hasAttribute-detail

  • 你看过我提供的链接,$ this-> hasAttribute('createdDate')应该做你想要的. (3认同)