我有一个模型(php类)和一个表在我的数据库。当我尝试不带where子句的find_many
时,它会找到所有数据库条目。它为每个数据库条目创建一个模型。但这些模型是空的,没有数据分配,因为我有自己的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 ?这是可能的吗,还是我必须用另一种方式做一些模型逻辑?
您不能这样做,因为Idiorm依赖于__set()
和__get()
魔法方法-如果您包含相同名称的适当类属性,那么这些魔法方法将永远不会被访问。查看PHP手册docs链接了解更多细节。
@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
只要我在模型的顶部删除我的私有/受保护的类变量,它就可以工作了。
<?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的代码生成,但然后你应该删除它们。