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


Fatal error: Using $this when not in object context in Doctrine 2

我在原则 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;
       }

}
?>

我在这里做错了什么?

关键字 $this-> 只能在类定义中使用,而不能像您那样在纯文件中使用并引用类本身。

在这样的事情中,使用 $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 创建任务