致命错误:在Doctrine 2中不在对象上下文中时使用$ this

时间:2013-10-22 04:38:11

标签: php oop symfony doctrine-orm doctrine

我在Doctrine 2中同时在2个相关表中插入数据时出现此错误。

以下是我的插入代码:

require_once("../test/doctrine/cli-config.php");
require_once "../test/doctrine/bootstrap.php";
require_once ("Users.php");
require_once ("ServiceProvider.php");



        $user = new Users();
        $user->setFirst_name('ABC');

        $serviceprovider = new ServiceProvider();
        $serviceprovider->setRib('111');
        // relate this user to the serviceprovider
        $user->setServiceProvider($serviceprovider);

        $em = $this->getDoctrine()->getManager();
        $em->persist($serviceprovider);
        $em->persist($user);
        $em->flush();

      return new Response(
            'Created User id: '.$user->getId_user().' and Service Provider id: '.$serviceprovider->getId()
        );

用户实体:

<?php

 /**
 * @Entity
 * @Table(name="users")
 * Total Number of Columns : 32
 */

class Users{

                         /**
                         * @OneToOne(targetEntity="ServiceProvider", mappedBy="users")
                         */
                            private $serviceprovider;


/* Attributes of Users */

     /** 
     * private long id_user
     * @Id 
     * @Column(type="integer") 
     * @GeneratedValue
     * @dummy
     * @Assert\NotEmpty
     */
       private $id_user;

     /** 
     * private Date dateSubscri 
     * @Column(type="string")
     */

     /** 
     * private String first_name 
     * @Column(type="string")
     * @Assert\NotEmpty
     */
       private $first_name;

/* Operations of Users */


       public function __construct()  
       {  
            echo 'The class "', __CLASS__, '" was initiated!<br />'; 
       } 


       /* public Users() */
       public function Users(){
        } 

       public function setServiceProvider($serviceprovider){
           $this->serviceprovider = $serviceprovider;
       }

       public function getServiceProvider(){
           return $this->serviceprovider;
       }

       public function getId_user(){
           return $this->id_user;
       }

       public function setId_user($user_id){ 
            $this->id_user=$user_id;
       }

       public function getFirst_name(){ 
           return $this->first_name;
       }
}
?>

服务提供商实体:

<?php

 /**
 * @Entity
 * @Table(name="serviceprovider")
 */


class ServiceProvider{


     // ...

                 /**
                 * @OneToOne(targetEntity="Users", inversedBy="serviceprovider")
                 * @JoinColumn(name="fk_user_id", referencedColumnName="id_user")
                 */
                    private $users;



     // ...



/* Attributes of ServiceProvider */


     /** 
     * private long id  
     * @Id 
     * @Column(type="integer") 
     * @GeneratedValue
     */
       private $id;

     /** 
     * private long id  
     * @Column(type="integer") 
     */
       private $fk_user_id;




/* Operations of ServiceProvider */

       public function __construct()  
       {  
            echo 'The class "', __CLASS__, '" was initiated!<br />'; 
       } 

       /* public ServiceProvider getId() */
       public function getId(){
           return $this->id;
        } 

       /* public  getUser() */
       public function getUser(){
           return $this->fk_user_id; 
       }

       /* public void setUser(fk_user_id) */
       public function setUser($fk_user_id){ 
            $this->fk_user_id = $fk_user_id;
       }


}

?>

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

关键字$ this-&gt;只能在类定义中使用,而不能像普通文件一样使用,并引用类本身。

在这样的事情中使用$ this是有效的:

require_once("../test/doctrine/cli-config.php");
require_once "../test/doctrine/bootstrap.php";
require_once ("Users.php");
require_once ("ServiceProvider.php");

class myClass {

    function save() {
        $user = new Users();
        $user->setFirst_name('ABC');

        $serviceprovider = new ServiceProvider();
        $serviceprovider->setRib('111');
        // relate this user to the serviceprovider
        $user->setServiceProvider($serviceprovider);

        $em = $this->getDoctrine()->getManager();
        $em->persist($serviceprovider);
        $em->persist($user);
        $em->flush();

      return new Response(
            'Created User id: '.$user->getId_user().' and Service Provider id: '.$serviceprovider->getId()
        );
    }

}    

$cl = new myClass();
$cl->save();

但myClass没有getDoctrine()方法,所以你仍会遇到错误。

在使用Symfony2的上下文中,“require_once”也不是必需的,因为框架使用名称空间非常好。

如果你想使用Symfony2 ...为cli创建一个任务