如何使用Idiorm / Paris自己的setter / getter?

时间:2016-06-28 08:56:59

标签: php mysql activerecord getter-setter idiorm

我的数据库中有一个模型(php类)和一个表。当我尝试find_many没有where子句时,它会找到所有数据库条目。它为每个数据库条目创建一个模型。但是这些模型是空的,没有分配数据,因为我的模型有自己的setter / getter。

<?php

class City extends Model {

    private $id;
    private $idOwm;
    private $idBla;
    private $name;
    private $longitude;
    private $latitude;
    private $country;

    public function data() {
        return $this->has_many('Data', 'idCity');
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getIdOwm() {
        return $this->idOwm;
    }

    public function setIdOwm($idOwm) {
        $this->idOwm = $idOwm;
    }

    public function getIdBla() {
        return $this->idBla;
    }

    public function setIdBla($idBla) {
        $this->idBla = $idBla;
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }

    public function getLongitude() {
        return $this->longitude;
    }

    public function setLongitude($longitude) {
        $this->longitude = $longitude;
    }

    public function getLatitude() {
        return $this->latitude;
    }

    public function setLatitude($latitude) {
        $this->latitude = $latitude;
    }

    public function getCountry() {
        return $this->country;
    }

    public function setCountry($country) {
        $this->country = $country;
    }
}

$cities = Model::factory('City')->find_many();

$cities是一个包含许多City类型模型的数组。

City Object
(
    [id:protected] => 
    [idOwm:protected] => 
    [idBla:protected] => 
    [name:protected] => 
    [longitude:protected] => 
    [latitude:protected] => 
    [country:protected] => 
    [orm] => ORM Object
        (
            [_connection_name:protected] => default
            [_table_name:protected] => city
            [_table_alias:protected] => 
            [_values:protected] => Array
                (
                )

            [_result_columns:protected] => Array
                (
                    [0] => *
                )

            [_using_default_result_columns:protected] => 1
            [_join_sources:protected] => Array
                (
                )

            [_distinct:protected] => 
            [_is_raw_query:protected] => 
            [_raw_query:protected] => 
            [_raw_parameters:protected] => Array
                (
                )

            [_where_conditions:protected] => Array
                (
                )

            [_limit:protected] => 
            [_offset:protected] => 
            [_order_by:protected] => Array
                (
                )

            [_group_by:protected] => Array
                (
                )

            [_having_conditions:protected] => Array
                (
                )

            [_data:protected] => Array
                (
                    [id] => 1
                    [idOwm] => 2950159
                    [idBla] => 0
                    [name] => Berlin
                    [latitude] => 52.52
                    [longitude] => 13.41
                    [country] => DE
                )

            [_dirty_fields:protected] => Array
                (
                )

            [_expr_fields:protected] => Array
                (
                )

            [_is_new:protected] => 
            [_instance_id_column:protected] => id
        )

)

如何在Idiorm / Paris使用我自己的setter / getter?这是可能的还是我必须以不同的方式做一些模型逻辑?

2 个答案:

答案 0 :(得分:2)

你不能这样做,因为Idiorm依赖于__set()__get()魔术方法 - 如果你包含相同名称的正确类属性,那么永远不会访问这些魔术方法。有关详细信息,请参阅PHP manualdocs link

要使IDE正常工作,您可以使用专为此目的而设计的PHPDoc @property commentsdocs link。我实际上并没有使用PHPStorm,但从我在其文档中可以看到它确实理解PHPDoc注释并可以使用它们来理解代码结构。

所以你的代码看起来像这样:

/**
 * @property int $id
 * @property int $idOwm
 * @property int $idBla
 * @property string $name
 * @property string $longitude
 * @property string $latitude
 * @property string $country
 */
class City extends Model {

    public function data() {
        return $this->has_many('Data', 'idCity');
    }

    public function getId() {
        return $this->id;
    }

    ...
}

这个其他stackoverflow问题和答案表明这将在Netbeans中起作用:https://stackoverflow.com/a/15160464/461813

答案 1 :(得分:0)

只要我在模型顶部删除私有/受保护的类变量就可以了。

<?php

class City extends Model {

    public function data() {
        return $this->has_many('Data', 'idCity');
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getIdOwm() {
        return $this->idOwm;
    }

    public function setIdOwm($idOwm) {
        $this->idOwm = $idOwm;
    }

    public function getIdBla() {
        return $this->idBla;
    }

    public function setIdBla($idBla) {
        $this->idBla = $idBla;
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }

    public function getLongitude() {
        return $this->longitude;
    }

    public function setLongitude($longitude) {
        $this->longitude = $longitude;
    }

    public function getLatitude() {
        return $this->latitude;
    }

    public function setLatitude($latitude) {
        $this->latitude = $latitude;
    }

    public function getCountry() {
        return $this->country;
    }

    public function setCountry($country) {
        $this->country = $country;
    }
}

$cities = Model::factory('City')->find_many();

我想让那里的变量使用PHPStorm的代码生成真的很方便,但是你应该删除它们。