簡體   English   中英

學說:OneToOne實體關系不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM