У меня есть таблица в doctrine в формате php. Выглядит она следующим образом.
/**
* @ORM\Entity
*/
class MyObj
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="city", type="text")
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="district", type="text")
*/
private $district;
/**
* @var string
*
* @ORM\Column(name="street", type="text")
*/
private $street;
/**
* @var string
*
* @ORM\Column(name="building", type="text")
*/
private $building;
/**
* @var string
*
* @ORM\Column(name="nubmerRoom", type="text")
*/
private $numberRoom;
Так же есть геттеры и сеттеры:
/**
* Get Id
*
* @return Id
*/
public function getId()
{
return $this->id;
}
/**
* Get City
*
* @return City
*/
public function getCity()
{
return $this->city;
}
/**
* Set City
*
* @param string $city
*
* @return MyObj
*/
public function setCity($city)
{
$this->city = $city;
return $this;
}
/**
* Get District
*
* @return District
*/
public function getDistrict()
{
return $this->district;
}
/**
* Set District
*
* @param string $district
*
* @return MyObj
*/
public function setDistrict($district)
{
$this->district = $district;
return $this;
}
/**
* Get Street
*
* @return Street
*/
public function getStreet()
{
return $this->street;
}
/**
* Set Street
*
* @param string $street
*
* @return MyObj
*/
public function setStreet($street)
{
$this->street = $street;
return $this;
}
/**
* Get Building
*
* @return Building
*/
public function getBuilding()
{
return $this->building;
}
/**
* Set Building
*
* @param string $building
*
* @return MyObj
*/
public function setBuilding($building)
{
$this->building = $building;
return $this;
}
/**
* Get NumberRoom
*
* @return Building
*/
public function getNumberRoom()
{
return $this->NumberRoom;
}
/**
* Set NumberRoom
*
* @param string $numberRoom
*
* @return MyObj
*/
public function setNumberRoom($numberRoom)
{
$this->numberRoom = $numberRoom;
return $this;
}
}
Проблема в следующем: необходимо создать новый столбец "adress", в который будут приходить значения из столбцов: city, district, street, building, numberRoom, при этом в самой базе эти столбцы не должны отображаться, однако их геттеры и сеттеры должны работать как обычно. Каким образом это возможно осуществить, если вообще возможно?
Предположим, что все ваши адреса однообразны и компоненты разделяются запятыми. Тогда можно поступить следующим образом:
/**
* @ORM\Entity
*/
class MyObj
{
...
/**
* Строка с полным адресом
* @ORM\Column(type="text")
* @var string
*/
private $address;
/** Сборка адреса из составляющих */
private implodeAddress()
{
$this->address = implode(',', [
$this->city,
$this->district,
$this->street,
$this->building,
$this->numberRoom
]);
}
/** Разбор адреса на составляющие */
private explodeAddress() {
$addressParts = explode(',', $this->address);
$this->city = $addressParts[0];
$this->district = $addressParts[1];
$this->street = $addressParts[2];
$this->building = $addressParts[3];
$this->numberRoom = $addressParts[0];
}
/**
* Get City
*
* @return City
*/
public function getCity()
{
// Прежде чем получать значение убедимся в разборе адреса
if(null === $this->city) {
$this->explodeAddress();
}
return $this->city;
}
/**
* Set City
*
* @param string $city
*
* @return MyObj
*/
public function setCity($city)
{
$this->city = $city;
// После изменения поля пересобираем адрес
$this->implodeAddress();
return $this;
}
...
/**
* И так с каждым полем составляющей адреса
*/
...
/**
* Получение собранного адреса
*/
public function getAddress()
{
// Прежде чем получать значение убедимся в наличии собранного адреса
if(null === $this->address) {
$this->implodeAddress();
}
return $this->address;
}
/**
* Set Address
*
* @param string $address
*
* @return MyObj
*/
public function setAddress($address)
{
$this->address = $address;
$this->explodeAddress();
return $this;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему то письмо отправляется в любом случае, в не зависимости от заполненных форм что не так? Тестирую на open servere
Есть n-кол-во массивовНужно проверить все эти массивы с одним и найти хотя бы одно совпадения, если есть, то возвращать true, если нету не одного...
пытаюсь достать данные с db при помощи PDO но получаю ошибку: