1

Doctrine 2 で単純な親子関係を設定しようとしていますが、明らかに何か間違っています。Doctrine Web サイトのAssociation Mapping ページに記載されている内容に従っています。

次のエラーが表示されます。

Warning: Invalid argument supplied for foreach() in .../Doctrine/ORM/Persisters/BasicEntityPersister.php on line 1579

Fatal error: Call to a member function setValue() on a non-object in .../Doctrine/ORM/PersistentCollection.php on line 175

これが私のデータベースのセットアップです:

CREATE TABLE IF NOT EXISTS `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

これが私のクラスです:

namespace Classes;

/** @Entity @Table(name="foo") */
class Foo
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

     /**
     * @OneToMany(targetEntity="classes\Foo", mappedBy="parent_id")
     **/
    private $children;

    /** @ManyToOne(targetEntity="classes\Foo", inversedBy="children") 
     *  @JoinColumn(name="parent_id", referencedColumnName="id")
     **/
    private $parent;


    public function __get($name)
    {
        if(property_exists($this, $name)){
            return $this->$name;
        } else {
            throw new \Exception('Field "' . $name . '" does not exist.');
        }
    }
}

これを呼び出すページは次のとおりです。

$server = '/Applications/XAMPP/htdocs/projects/Scratch';

require_once $server . '/Model/bootstrap.php';

$myFoo = $em->find('classes\Foo',37);

echo $myFoo->id . '<br />';

echo count($myFoo->children);
4

2 に答える 2

0

答えではありませんが、ここに回避策があります...

以下を使用できます。

$children = $em->getRepository('classes\Foo')->findby(array('parent_id',parentID);
于 2013-04-09T05:38:35.440 に答える
0

私はこれを自分で見つけることができないようですが、PHP の名前空間は大文字と小文字を区別しますか?

この種のリレーションをセットアップする際に使用されるもう 1 つの方法は、エンティティ コンストラクターでのコレクションのインスタンス化です。これは、特に children プロパティに適用されます。

お役に立てれば。

于 2013-04-03T04:11:06.323 に答える