1

注釈を使用してリンクされている 3 つのエンティティがあります。UserStudentおよび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 にログインして同じことを行ったときにも発生します。

基本的に、ログインしている生徒と一致する場合にのみエラーが発生します

4

3 に答える 3

1

使えないと思いますStudentID =1。Student オブジェクトが必要です。StudentID は Student オブジェクトです。

ネーミングが間違っています。あなたのクラスでは、次のようになるはずです

保護されて$studentいない$studentID

次に、クエリで、このような学生オブジェクトが必要です

$student = $this->getDoctrine()->getRepository('StudentBundle:Student').find(1)

array('pageID' => $pageObject, 'student' => $student)

于 2013-01-16T07:19:53.920 に答える
0
/**
  * @ORM\ManyToOne(targetEntity="Student")
  * @ORM\JoinColumn(name="student_id", referencedColumnName="id")
  */
  protected $studentID;

/**
  * @ORM\ManyToOne(targetEntity="Student")
  * @ORM\JoinColumn(name="studentID_id", referencedColumnName="id")
  */
  protected $studentID;

変数名を保持する場合は、結合列にも保持する必要があります

于 2016-04-07T10:43:01.083 に答える
0

結合列の名前にタイプミスがありますか?

class Recording
{
//..

  /**
    * @ORM\ManyToOne(targetEntity="Student")
    * @ORM\JoinColumn(name="student_id", referencedColumnName="id")
    */
    protected $studentID;
}
于 2013-01-16T07:15:52.463 に答える