Wie um zu überprüfen, ob das Modell haben bestimmte Eigenschaft oder nicht?
Ich möchte erstellen Sie eine neue model-Klasse, die erweitert werden, in allen anderen Klassen. Ich will auto einige Felder als admin addind/Bearbeitung eines Datensatzes. also createdDate, createdIp, updatedDate, updatedIp..etc.
Nun mein Problem alle Felder werden nicht in allen Modellen. Ich will also prüfen ob das Objekt hat createdDate Eigenschaft nur dann, setzen Sie den Wert. Wenn es kein Zustand und das Modell hat nicht createdDate Mitglied, dann wird es Fehler generieren. Unten ist der code was ich versuche. Aber es funktioniert nicht.
public function beforeSave()
{
if(isset($this->createdDate))
die('this model have createdDate field');
else
die('this model does not have createdDate field');
}
Modell kann nicht geradlinig, es kann verlängern Datenbank-Tabelle Verwandte Klasse automatisch. Unten ist die gedruckte Objekt. createdDate Feld ist in der privaten Liste.
Wenn ich mit var_dump(property_exists($this, 'createdDate'));
es gibt mir false.
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] =>
)
Mir bitte helfen, fügen Sie diese Logik.
ja.. CActiveRecord verlängert zu meiner Klasse.
MasterAdmin.php
class MasterAdmin extends CActiveRecord
{
public function beforeSave()
{
echo '<pre>';
var_dump(property_exists($this, 'createdDate'));
exit;
}
}
User.php
class User extend MasterAdmin
{
//So whenever any record added or edited, beforeSave will be called and i can autoset createddate value.
}
- ist dies zu u helfen ??? property_exists() .. Check Handbuch für dieses -- php.net/manual/en/function.property-exists.php ich denke, das ist, was u suchst
- Suchen Sie in Ihrer gedruckten Objekts ist unklar, welches Objekt Ihr
beforeSave()
Methode gehört aber in jedem FallcreatedDate
ist keine Eigenschaft, es ist ein array-Schlüssel dercolumns
Eigentum desCMysqlTableSchema
Objekt. VorausgesetztbeforeSave
ist eine Methode des Objekts, es wäreisset($this->columns['createdDate'])
aber es ist schwer zu wissen, für sicher, dass da die Verschachtelung. - was framework verwenden Sie ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit activerecord?
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#hasAttribute-detail
property_exists()
ist der bessere Ansatzproperty_exists()
ist, was Sie suchen.Diese Weise, wenn die Eigenschaft vorhanden ist, aber zu
NULL
die obige Funktion gibt true zurück, da Sie erwarten würden, währendisset()
zurückkehren würde, eine falsche führt Sie zu glauben, dass die Eigenschaft nicht vorhanden ist.Funktioniert für mich. Sehen Beispiel