0
我有兩個類:原則2.1 - 調用未定義的方法+ MyMethod(Proxy)?
新聞:
/** @Entity @Table(name="news") */
class News {
/**
* @Id @GeneratedValue @Column(type="integer")
* @var integer
*/
protected $id;
/**
* @Column(type="string", length=100)
* @var string
*/
protected $title;
/**
* @Column(type="text")
* @var string
*/
protected $content;
/**
* @ManyToOne(targetEntity="User", inversedBy="news")
* @JoinColumn(referencedColumnName="id")
*/
protected $author;
/**
* @ManyToOne(targetEntity="NewsCategory", inversedBy="news")
* @JoinColumn(referencedColumnName="id")
*/
protected $category;
/**
* @Column(type="datetime")
*/
protected $add_date;
# CATEGORY methods
public function setCategory($val) { if($val instanceof NewsCategory) $this->category = $val; }
public function getCategory() { return $this->category; }
}
新聞分類:
/** @Entity @Table(name="news_category") */
class NewsCategory {
/**
* @Id @GeneratedValue @Column(type="integer")
* @var integer
*/
protected $id;
/**
* @Column(type="string", length=50, unique=TRUE)
* @var string
*/
protected $name;
/**
* @OneToMany(targetEntity="News", mappedBy="category")
*/
protected $news;
public function __construct() {
$this->news = new \Doctrine\Common\Collections\ArrayCollection;
}
public function setName($name) { $this->name = $name; }
public function getName() { return $this->name; }
public function getNews() { return $this->news; }
}
我想這個查詢下載一個新聞:
$q = $this->db->createQuery("SELECT n FROM News n WHERE n.id = :id");
$q->setParameter('id', $_GET['id']);
$news = $q->getResult();
而接下來,我想獲得與此相關的新聞與
$news->getCategory()->getId()
有了上面的代碼中,我得到這個錯誤類別的ID:
Fatal error: Call to undefined method DoctrineProxies\NewsCategoryProxy::getId() in C:\[...]\newsController.php on line 61
有什麼不對?爲什麼我的NewsCategory
類看不到getId()
方法?
在學說文檔上,他們有''protected'成員。而且,'protected'類型在你的例子中:)。那麼比什麼更好? – 2012-01-23 16:21:44
你是對的,我糾正了我的答案,並將其標記爲私人。正如你在教條文檔的鏈接中看到的,我給了他們在課堂以外不能訪問的屬性。 [Here](http://www.doctrine-project.org/docs/orm/2.1/en/reference/working-with-objects.html#entity-object-graph-traversal),你可以看到他們使用公共getter和制定私人財產。 – BlackCharly 2012-01-23 22:33:05
不要盲目地使用'private'或'protected'而不知道原因。 'private'只能將這些屬性的訪問權限限制在擁有的類中(不包括子類)。 'protected'授予訪問子類的權限。使用'protected'的一個好處是它允許你的[實體被序列化](http://www.doctrine-project.org/docs/orm/2.2/en/reference/working-with-objects.html#merging -entities) – Phil 2012-01-23 23:11:32