注釈を使用してリンクされている 3 つのエンティティがあります。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;
ユーザー.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;
編集:基本的に、学生オブジェクトにはgetID関数があり、基本的に$this->student->getID();
エラーを返します$this->student
。これはオブジェクトである必要があり、このシナリオにはないようです。
編集 2: わかりました、非常に奇妙な状況に遭遇しました。ID 1 と 5 の 2 つの学生アカウントがあるとします。getRepository()
学生 1 として を呼び出すと、それを指定する'studentID' => 1
とエラーが発生しますが、変更する'student' => 5
と機能します。これは、生徒 5 にログインして同じことを行ったときにも発生します。
基本的に、ログインしている生徒と一致する場合にのみエラーが発生します