我有2個實體具有相同的字段 - 父,子,順序。其實這是一個機制,這3個字段不適用於此實體的內容 - 如名稱,標題,類別等。Symfony2 - 擴展實體,抽象實體
我想將此字段設置爲一個地方,一個類,我正在考慮應該在哪裏放置它。它應該是一個抽象類嗎?或者我應該做一個特質?
我也可以使用ORM \ Discriminator機制,但我認爲這是爲了別的,不是我想做的事。
我有2個實體具有相同的字段 - 父,子,順序。其實這是一個機制,這3個字段不適用於此實體的內容 - 如名稱,標題,類別等。Symfony2 - 擴展實體,抽象實體
我想將此字段設置爲一個地方,一個類,我正在考慮應該在哪裏放置它。它應該是一個抽象類嗎?或者我應該做一個特質?
我也可以使用ORM \ Discriminator機制,但我認爲這是爲了別的,不是我想做的事。
我想使與教義@MappedSuperclass註釋一個抽象類,共享字段和實體擴展它們
這裏是具有created_at字段的例子(不要求Gedmo註釋,只是一個例子)
namespace Your\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\MappedSuperclass;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* Abstract base class to be extended by my entity classes with same fields
*
* @MappedSuperclass
*/
abstract class AbstractEntity {
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* Get id
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Get createdAt
* @return \DateTime
*/
public function getCreatedAt() {
return $this->createdAt;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return AbstractEntity
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
}
您的實體都擴展這個類,如:
class YourEntityClass extends AbstractEntity
{
在YourEntityClass的$ id屬性必須被 「保護」
前段時間我有這個問題。我也想爲實體(或值對象,無論)提供很好的抽象,只是有點懶惰。但這不是恕我直言的好方法。
如果來自一個實體的名稱必須具有另一個實體的其他長度,該怎麼辦?如果你想添加新的字段,將其添加到一個實體,並且過了一段時間你想在另一個實體中,但是你忘記將它移動到抽象?
我認爲實體就是這樣一種自治的東西,將它的某些部分移動到抽象概念上是毫無意義和令人困惑的。
請記住KISS的原理。
請您詳細說明您的使用案例嗎?目前,尚不清楚應該如何分享共同行爲的實體。 – k0pernikus
他們沒有關係。它是兩個分離的實體,它們具有相同的字段。 –
更好地使2個正常的實體..通常有相同的屬性,但想法是有儘可能多的獨立的Entitties ..如果你想要怎麼做什麼特質是更好的選擇。 (例如Dates Trait可以存儲創建/更新/發佈的日期時間字段,這些字段可用於不同類型的實體..),您可以在絕對不同的Entites中將其用於您想要的地方。 – Svetoslav