У меня есть модель (класс 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? Возможно ли это, или мне придется делать какую-то модельную логику другим способом?
Вы не можете сделать это, так как Идиорм полагается на __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;
}
...
}
Этот другой вопрос и ответ о стекопотоке предполагает, что это будет работать в 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, но тогда вы должны удалить их.