Необходимо создать новый столбец в базе, в который будут приходить значения из других столбцов в таблице

135
13 декабря 2019, 06:50

У меня есть таблица в 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, при этом в самой базе эти столбцы не должны отображаться, однако их геттеры и сеттеры должны работать как обычно. Каким образом это возможно осуществить, если вообще возможно?

Answer 1

Предположим, что все ваши адреса однообразны и компоненты разделяются запятыми. Тогда можно поступить следующим образом:

/**
 * @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;
    }
}
READ ALSO
php отправка писем на почту с сайта

php отправка писем на почту с сайта

Почему то письмо отправляется в любом случае, в не зависимости от заполненных форм что не так? Тестирую на open servere

122
Проверка масива на совпадения

Проверка масива на совпадения

Есть n-кол-во массивовНужно проверить все эти массивы с одним и найти хотя бы одно совпадения, если есть, то возвращать true, если нету не одного...

143
Ошибка при получении данных с массива PHP

Ошибка при получении данных с массива PHP

пытаюсь достать данные с db при помощи PDO но получаю ошибку:

101