[英]Doctrine : OneToOne entity relationship doesn't work
我正在使用php,我有兩個實體Message和Post。 帖子是消息實體中的一個屬性,它應該是一對一的單向關系。 但是當我在我的控制器中調用message-> getPost() - > getText()時,我收到以下錯誤消息:
試圖在C:\\ wamp64 \\ www \\ Test \\ monApplication \\ controller \\ mainController.php中獲取非對象的屬性
消息實體:
<?php
/**
* @Entity
* @Table(name="message")
*/
class message{
/** @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;
/**
* @ORM\OneToOne(targetEntity="post", cascade={"persist"})
* @JoinColumn(name="post", referencedColumnName ="id")
*/
private $post;
/** @Column(type="integer") */
public $likes;
public function getPost(){
return $this->post;
}
public function getLikes(){
return $this->likes;
}
}
?>
郵政實體
<?php
/**
* @Entity
* @Table(name="post")
*/
class post{
/** @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;
/** @Column(type="string", length=2000) */
public $texte;
/** @Column(type="string", length=200) */
public $image;
/** @Column(type="TIMESTAMP", length=4000) */
public $date;
}
?>
我的dbconnection類:
<?php
define ('HOST', 'localhost') ;
define ('USER', 'root' ) ;
define ('PASS', '' ) ;
define ('DB', 'tp' ) ;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
class dbconnection{
private static $instance=null, $entityManager;
private $error=null ;
private function __construct(){
$config = Setup::createAnnotationMetadataConfiguration(array("../../monApplication/model/"), true);
$param = array(
'dbname' => DB,
'user' => USER,
'password' => PASS,
'host' => HOST,
'driver' => 'pdo_mysql');
try{
self::$entityManager = EntityManager::create($param, $config);
}
catch(Exception $e) {
echo "Probleme connexion base de données:".$e->getMessage();
$this->error = $e->getMessage();
}
}
public static function getInstance(){
if(self::$instance == null){
self::$instance = new dbconnection();
}
return self::$instance;
}
public function closeConnection(){
self::$instance=null;
}
public function getEntityManager(){
if(!empty(self::$entityManager))
return self::$entityManager;
else
return NULL;
}
public function __clone(){
}
public function getError(){
return $this->error;
}
}
我的主控制器:
<?php
class mainController
{
public static function showMessage($request,$context){
$messages = messageTable::getAllMessages();
echo $message[0]->getPost()->text;
return context::SUCCESS;
}
}
最后我的項目架構是這樣的:
試着改變
private $post;
至
public $post;
(你應該使用受保護的變量)
您還有其他2個問題:
/** @Column(type="string", length=2000) */
public $texte;
應該 :
/** @Column(type="text") */
public $texte;
因為字符串限制為255個caracters長度。
你的財產是“texte”所以你應該有
echo $message[0]->getPost()->texte;
代替
echo $message[0]->getPost()->text;
我建議調試的第一件事就是你沒有提到它(沒有引用messageTable)
messageTable::getAllMessages();
使用var_dump()或dump()查看類型,並檢查它是否返回數據,然后決定如何訪問第一條消息。
其次,注意沒有$ message變量,有$ message(最后的s)。
還有,沒有 - >文字,有 - > texte
然后,將context :: SUCCESS修復為$ context :: SUCCESS
最后,幸運的是會有更多錯誤,但是嘿,var_dump()會成為你的朋友,所以要好好利用它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.