KO3:Kohana_ormモデルのPropertiesのふりをします
-
01-10-2019 - |
質問
私はこのように見える非常にシンプルなモデルを持っているとします:
class Model_Person extends ORM
{
/*
CREATE TABLE `persons` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`firstname` VARCHAR(45) NOT NULL,
`lastname` VARCHAR(45) NOT NULL,
`date_of_birth` DATE NOT NULL,
);
*/
}
フルネームでふりをするようなプロパティを追加する方法はありますか?
たとえば、私はこれを行うことができます:
$person = ORM::factory('person', 7);
echo $person->fullname;
これの代わりに:
$person = ORM::factory('person', 7);
echo $person->firstname.' '.$person->lastname;
別の例は次のとおりです is_young
年齢が特定の数を下回った場合、年齢を計算し、真実に戻す財産。
解決
「魔法」を使用できます __get()
このような方法:
public function __get($column)
{
switch($column)
{
case 'fullname' :
return $this->firstname.' '.$this->lastname;
case 'is_young' :
// calculate persons age
}
return parent::__get($column);
}
または、次のような追加の方法を作成することもできます fullname()
と age()
(私にはもっと良いようです)。
他のヒント
このソリューションを使用してみませんか?
class Model_Person extends ORM
{
public function fullname()
{
return $this->firstname.' '.$this->lastname;
}
}
$person = ORM::factory('person', 1);
echo $person->fullname();
以下を実行できます application/classes/ORM.php
(application/classes/orm.php
3.2より前のコハナの場合):
<?php
class ORM extends Kohana_ORM {
public function __get($name) {
$getter = 'get_' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
}
return parent::__get($name);
}
}
次に、モデルクラスにメソッドを追加するだけです。
public function get_fullname() {
return $this->firstname . ' ' . $this->lastname;
}
プロパティとしてアクセスできるようになります。
所属していません StackOverflow