0
我有2個實體,一個作爲一個主要的超類,由辨別器等組成,另一個擴展了這個超類......這樣我就可以記錄所有的動作一個名爲Action的表。原則2鑑別器繼承映射導致findBy方法不起作用
我discrimator實體:
namespace Entities\Members;
/**
* @Entity
* @Table(name="actions")
* @MappedSuperClass
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="action_type", type="string")
* @DiscriminatorMap({"comments" = "Comments", "blog" = "Blog"})
* @HasLifecycleCallbacksIndex
*/
class Action {
/**
* @Id
* @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column(type="string", length=300, nullable=true) */
public $name;
/** @Column(name="action_date", type="datetime", columnDefinition="datetime", nullable=false) */
protected $action_date;
/** @PrePersist */
public function updated() {
$this->action_date = new \DateTime("now");
}
}
這是我的一個實體,我使用延長上述discrimator實體:
namespace Entities\Members;
/**
* @Entity
* @Table(name="comments")
* @HasLifecycleCallbacks
*/
class Comments extends Action {
/**
* @Id @Column(name="id", type="bigint",length=15)
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column(name="blog_id", type="integer", nullable=true) */
protected $blog_id;
/** @Column(name="comment", type="string", length=255, nullable=true) */
protected $comment;
/** @Column(name="comment_date", type="datetime", columnDefinition="datetime", nullable=true) */
protected $comment_date;
/**
* @ManyToOne(targetEntity="Members",inversedBy="comments", cascade={"persist"})
* @JoinColumn(name="userid", referencedColumnName="id")
*/
protected $author;
public function __construct() {
$this->comment_date = $this->comment_date = new \DateTime("now");
}
}
這個工作得很好,當我堅持的意見實體,例如
$entity = new Entities\Comments;
$entity->comment = "my new comment";
$this->em->persist($entity);
$this->em->flush();
當我堅持下去,它成功地增加了動作到動作表...
但是,我不能使用任何findBy,findByOne方法了,,從這些方法中的任何結果的返回值= null 現在,當我編輯評論類,並刪除'延伸從行動',學說findby,findOneBy方法開始工作 ,但它不會添加到tmy鑑別表,因爲它不擴展主操作超類...
我需要它來擴展動作,並有學說的方法蘇ch找到,findOneBy等工作也...
有什麼建議嗎?
nope ..當我做get_class($實體)時,它打印出此代碼的實際類名.. BaseController?但如果我刪除'擴展活動'它打印出實體/評論,所以它的工作原理,如果你不擴大行動.. – 2012-03-05 12:21:46
張貼您的查詢代碼。 – Cerad 2012-03-05 13:46:38
它和你的一樣:$ repo = $ this - > _ em-> getRepository('Entities \ Comments'); $ entity = $ repo-> findOneBy(array('name'=>'bars')); // $ entity = $ repo-> findOneById(233); echo get_class($ entity)。 ''。 $ entity-> id。 「\ n」 個;我試了兩個,你可以看到上面... findOneById和findOneBy(數組)我認爲它的ID是與所有擴展它的實體衝突....(操作ID字段) – 2012-03-05 18:16:10