2

私には2つのエンティティがViewあり、Location

それぞれViewLocation.

私の見解では、次のようになります。

class View
{
    //..... Other Stuff.....

    /**
     * @ManyToOne(targetEntity="Location", inversedBy="views")
     **/
    private $location;

    //...setters and getters....

    public function setLocation($location){
        $this->location = $location;
    }

}

そして、私の場所のために

class Location
{
    //.....other stuff.....

    /**
     * @OneToMany(targetEntity="View", mappedBy="location")
     **/
    private $views;

    public function __construct() {
        $this->created = $this->updated = new \DateTime("now");
        $this->views = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // .... Getters and Setters ....
}

しかし、私がこれをしようとすると:

<?php
    $this->pageview = $this->em->getRepository('Entities\View')->find(1);
    $this->location = $this->em->getRepository('Entities\Location')->find(1);
    $this->pageview->setLocation($this->location);
    $this->em->persist($this->pageview);
    $this->em->flush();
?>

または、新しいエンティティを作成する場合でも:

<?php
    $pv = new Entities\Pageview;
    $lc = new Entities\Location;
    $this->em->persist($lc);
    $this->em->flush();
    $pv->setLocation($lc);
    $this->em->persist($pv);
    $this->em->flush();
?>

Doctrineはデータベースに location_id を設定しません(常に NULL です)。

私はSQLクエリをチェックしましたが、設定しようとしてもいません.私が得ているのは次のとおりです:

INSERT INTO View (field1, field2, created, updated) VALUES ('val1', 'val2', '2013-07-17T12:10:56+01:00', '2013-07-17T12:10:56+01:00')

場所への参照はまったくありません...奇妙なことに、field1とfield2をうまく更新できます...そして、他のすべての関係はアプリケーション全体で機能しています...ビューと場所を機能させることができません...

編集

現在、別のコンピューターで正確にいくつかのコードが動作しています。なぜ機能しなかったのかはわかりませんが、ファイルを元に戻し、コンピューターを再起動したところ、キャッシュの問題が発生したと思いますか?

4

4 に答える 4

1

コンピューターを再起動すると、問題は解決しました...なぜうまくいかなかったのかわかりません!

たぶん、キャッシュやプロキシと関係があります...わかりません...

于 2013-07-17T16:36:39.117 に答える
0

これは、Doctrine ORM キャッシュ ドライバーに関連しています。

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apcu
                result_cache_driver: apcu
                query_cache_driver: apcu

以前はキャッシングAPCuを行ってDEVいましたが、(Apache を再起動して) APCu をクリアするとうまくいきました。

于 2016-11-10T11:03:32.707 に答える
0

Doctrine が結合する必要がある正しい列を明示的に参照してみてください。

/**
 * @ManyToOne(targetEntity="Location")
 * @JoinColumn(name="location_id", referencedColumnName="id")
 */
private $location;

また、この例では:

$this->pageview = $this->em->getRepository('Entities\View')->find(1);
$this->location = $this->em->getRepository('Entities\Location')->find(1);
$this->pageview->setLocation($this->location);
$this->em->persist($this->pageview);
$this->em->flush();

既存のデータを更新するだけであれば、エンティティを永続化する必要はありません。

于 2013-07-17T11:31:25.077 に答える