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