Omezení rozhraní entity – problém s asociovaným stavem

Roman Halaxa
Člen | 60
+
0
-

Zdravím,

Mám malý problém. Refaktoruji model a chtěl jsem omezit rozhraní entity jako je popsáno zde

/**
 * @Entity
 */
class Article {

    const STATUS_DRAFT = 1;
    const STATUS_PUBLISHED = 2;

    /** @Column(type="integer") */
    private $status;

    /** @Column(type="date") */
    private $publishDate;

    /** @Column(type="integer") */
    private $viewCount;

    // další properties

    public function __construct() {
        $this->status = static::STATUS_DRAFT;
        $this->viewCount = 0;
    }

    public function setPublished(DateTime $date) {
        $this->status = static::STATUS_PUBLISHED;
        $this->publishDate = $date;
    }

    // další gettery a settery (settery by měly obsahovat validaci vstupů)

}

Funkce publish krásně nastaví vše aby byli data konzistentní. Mám podobnou entitu, ale můj problém je, že stav mám v asociované tabulce, a tudíž mi nestačí říct stav = 1,2… ale musel bych stav podle id najít a ten pak nastavit. Mít však entity manager v entitě je prý nevhodné a jiné řešení mě nenapadá. Jde nějak nastavit asociované entity přímo v entitě nějakým jiným způsobem ?

Předem děkuji za odpověď :)

EDIT: momentálně mám pomyslné publish napsané jako servisní třídu, ale chtěl jsem to mít takhle v entitě, protože mi to příjde mnohem elegantnější.

Editoval Roman Halaxa (8. 1. 2019 11:55)