我有三个使用注释链接在一起的实体。我有一个User
,Student
和Recording
表。
目前,录制实体包含一个链接到学生实体的StudentID字段,学生实体的ID链接到用户实体中的UserID。
我的问题是,当我使用Doctrine:
通过查询获得一个Recording对象数组时$studentRecordings = $this->getDoctrine()->getRepository('StudentBundle:Recording')
->findBy(
array('pageID' => $pageObject, 'studentID' => $studentObject),
array('filename' => 'ASC')
);
我收到错误,无法访问学生信息。
["studentID"]=>
object(stdClass)#552 (6) {
["__CLASS__"]=>
string(39) "Acme\studentBundle\Entity\Student"
["__IS_PROXY__"]=>
bool(true)
["__PROXY_INITIALIZED__"]=>
bool(false)
["id"]=>
NULL
["class"]=>
NULL
["parent"]=>
NULL
}
然后给我一个错误Call to a member function getId() on a non-object in StudentBundle/Entity/Student.php
Recording.php:
class Recording
{
public $file;
/**
* @ORM\Id
* @ORM\Column(name="id",type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $recordingID;
/**
* @ORM\ManyToOne(targetEntity="Page")
* @ORM\JoinColumn(name="pageID", referencedColumnName="id")
*/
protected $pageID;
/**
* @ORM\ManyToOne(targetEntity="Student")
* @ORM\JoinColumn(name="student", referencedColumnName="id")
*/
protected $studentID;
/**
* @ORM\Column(name="filename", type="string")
*/
protected $filename;
Student.php
class Student
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
protected $id;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Classes")
* @ORM\JoinColumn(name="class", referencedColumnName="id")
*/
protected $class;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="parent", referencedColumnName="id")
*/
protected $parent;
user.php的
class User implements UserInterface
{
/**
* @ORM\id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $first_name;
/**
* @ORM\Column(type="string")
*/
protected $last_name;
/**
* @ORM\ManyToOne(targetEntity="Role")
* @ORM\JoinColumn(name="role", referencedColumnName="id")
*/
protected $role;
/**
* @ORM\Column(type="string")
*/
protected $username;
/**
* @ORM\Column(type="string")
*/
protected $password;
/**
* @ORM\Column(type="string")
*/
protected $email;
/**
* @ORM\Column(type="string")
*/
protected $salt;
/**
* @ORM\Column(name="is_active", type="integer")
*/
protected $isActive;
编辑:好的,所以基本上学生对象有一个基本返回$this->student->getID();
的getID函数
错误是$this->student
应该是一个对象,它似乎不在这种情况下。
getRepository()
称为学生1时,如果我指定'studentID' => 1
,则会给出该错误,但是如果我将其更改为{{ 1}}它有效。当我登录学生5并做同样的事情时,也会发生这种情况。
基本上,如果它与Logged in Student
相匹配,它只会给出错误答案 0 :(得分:1)
我认为你不能使用StudentID =1
。您需要拥有学生对象。
StudentID是您的学生对象。
你命名是错误的。在你的课堂上它应该像
受保护的$student
而不是$studentID
然后在查询中你需要像这样的学生对象
$student = $this->getDoctrine()->getRepository('StudentBundle:Student').find(1)
array('pageID' => $pageObject, 'student' => $student)
答案 1 :(得分:0)
连接列名称中的错误?
class Recording
{
//..
/**
* @ORM\ManyToOne(targetEntity="Student")
* @ORM\JoinColumn(name="student_id", referencedColumnName="id")
*/
protected $studentID;
}
答案 2 :(得分:0)
/**
* @ORM\ManyToOne(targetEntity="Student")
* @ORM\JoinColumn(name="student_id", referencedColumnName="id")
*/
protected $studentID;
to
/**
* @ORM\ManyToOne(targetEntity="Student")
* @ORM\JoinColumn(name="studentID_id", referencedColumnName="id")
*/
protected $studentID;
if you keep var name also need to keep it in joincolumn