Можно ли в доктрине создать вычисляемое поле?

Да, в Doctrine, ORM для языка программирования PHP, можно создавать вычисляемые поля. Вычисляемые поля — это такие поля, значения которых не хранятся в базе данных, а вычисляются на лету при выполнении запросов.

Для создания вычисляемых полей в Doctrine используется аннотация @DoctrineORMMappingPrePersist или @DoctrineORMMappingPreUpdate, которая указывает на метод, который должен быть выполнен перед сохранением или обновлением сущности.

Например, представим, что у нас есть сущность Order, у которой есть поля amount, quantity и total. Стоимость товара (total) является вычисляемым полем, которое должно быть равно произведению количества (quantity) на стоимость единицы товара (amount).

Код класса сущности Order может выглядеть примерно так:

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity
 * @ORMTable(name="orders")
 * @ORMHasLifecycleCallbacks
 */
class Order
{
    /**
     * @ORMId
     * @ORMGeneratedValue
     * @ORMColumn(type="integer")
     */
    private $id;
    
    /**
     * @ORMColumn(type="decimal", precision=10, scale=2)
     */
    private $amount;
    
    /**
     * @ORMColumn(type="integer")
     */
    private $quantity;
    
    /**
     * @ORMColumn(type="decimal", precision=10, scale=2)
     */
    private $total;
    
    /**
     * @ORMPrePersist
     * @ORMPreUpdate
     */
    public function calculateTotal()
    {
        $this->total = $this->amount * $this->quantity;
    }
    
    // Другие геттеры и сеттеры ...
}

В этом примере мы использовали аннотацию @ORMHasLifecycleCallbacks для указания того, что у нас есть методы обратного вызова, и аннотацию @ORMPrePersist и @ORMPreUpdate для указания того, что метод calculateTotal должен быть выполнен перед сохранением или обновлением сущности.

Теперь, при сохранении новой сущности Order или обновлении уже существующей, метод calculateTotal будет вызываться автоматически, и поле total будет вычислено и установлено соответствующим образом.

Таким образом, в Doctrine можно создавать вычисляемые поля, что позволяет гибко определять значения полей, зависящие от других полей или каких-либо расчетов.