2

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

<?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?这是可能的还是我必须以不同的方式做一些模型逻辑?

4

2 回答 2

2

您不能这样做,因为 Idiorm 依赖于__set()__get()魔术方法 - 如果您包含同名的适当类属性,那么这些魔术方法将永远不会被访问。有关这方面的更多详细信息,请参阅PHP 手册文档链接

要让您的 IDE 正常工作,您可能可以使用专为此目的设计的PHPDoc@property注释文档链接。我实际上并没有使用 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

于 2017-02-24T00:45:38.363 回答
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 的代码生成真的很方便,但是你应该删除它们。

于 2016-06-28T09:22:19.953 回答