简体   繁体   English

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

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

I am getting this error in Doctrine 2 while Inserting Data in 2 related tables at the same time. 同时在2个相关表中插入数据时,在教义2中出现此错误。

Here is my code for Insertion: 这是我的插入代码:

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()
        );

Users Entity : 用户实体:

<?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;
       }
}
?>

Service Provider Entity: 服务提供商实体:

<?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;
       }


}

?>

What am I doing wrong here ? 我在这里做错了什么?

The keyword $this-> can be used only in a class definition, not in a plain file like you have and references the class itself. 关键字$ this->只能在类定义中使用,而不能在像您这样的普通文件中使用,并且引用类本身。

In something like this would be valid using $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();

But myClass does not have a getDoctrine() method so you would still get errors. 但是myClass没有getDoctrine()方法,因此您仍然会出错。

In the context of using Symfony2 "require_once" is nor required as the framework uses namespaces very well. 在使用Symfony2的上下文中,由于框架很好地使用了名称空间,因此不需要“ require_once”。

If you want to use Symfony2... for cli create a task 如果要使用Symfony2 ...进行cli,请创建任务

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM