gpt4 book ai didi

php - 如何在 Idiorm/Paris 中使用自己的 setter/getter?

转载 作者:行者123 更新时间:2023-11-29 02:16:58 24 4
gpt4 key购买 nike

我的数据库中有一个模型(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 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

关于php - 如何在 Idiorm/Paris 中使用自己的 setter/getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com