Php Doctrine2 ORM OneToOne不工作更新更改为ManyToMany但不完全工作
我有两个名为广告和用户的表格。用户Id被写入广告表。我现在创建了第三个表,名为Bookmark。这个表有两列,广告id和用户id。当我看到我喜欢的广告时,我可以添加一个书签,以便在我的私人部分更容易找到它。当我在我的私人部分查看我的书签时,我希望立即查看广告的详细信息,因此在我的存储库中,我希望创建一个连接来读取广告表中的信息。我以为这将是一种一刀切的关系。我还必须确保,如果广告被删除,那么所有的书签都需要删除,所以我认为这是一种双向关系。因此,我有以下建议: Entity/Bookmark.phpPhp Doctrine2 ORM OneToOne不工作更新更改为ManyToMany但不完全工作,php,doctrine-orm,Php,Doctrine Orm,我有两个名为广告和用户的表格。用户Id被写入广告表。我现在创建了第三个表,名为Bookmark。这个表有两列,广告id和用户id。当我看到我喜欢的广告时,我可以添加一个书签,以便在我的私人部分更容易找到它。当我在我的私人部分查看我的书签时,我希望立即查看广告的详细信息,因此在我的存储库中,我希望创建一个连接来读取广告表中的信息。我以为这将是一种一刀切的关系。我还必须确保,如果广告被删除,那么所有的书签都需要删除,所以我认为这是一种双向关系。因此,我有以下建议: Entity/Bookmark.p
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
Entity\Advert.php
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
Advert\Repository\Advert\Repository.php
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
我做错了什么?我的误解在哪里?我收到错误消息:
Adverte\Entity\Bookmark没有名为advertId的关联
正如我所说,当我点击“将广告添加到书签”时,表格书签才会被填满。我需要一个连接,以便在单击“显示我的书签”时显示广告详细信息,如果广告或用户被删除,则需要从书签表中删除所有书签。这是一种单向的双向关系吗?有什么不对
下面的更新1不工作
我已经更新了下面的2个文件,但没有显示任何书签。相反,我应该看到一个书签广告列表加上广告的详细信息。我甚至还没有尝试让我的服务“书签广告”或方法来检查一个广告是否被书签再次工作。我以前让它工作过,但我想我现在真的很困惑
AdvertController.php
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
Repository\UserRepository.php
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
更新下面的第2条工作内容
你是对的,我不需要UserRepository查询,请查看书签广告列表。我只需要换个房间
AdvertController.php
/**
* Bookmark
*
* @ORM\Table(name="bookmark")
* @ORM\Entity(repositoryClass="Advert\Repository\BookmarkRepository")
*/
class Bookmark
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="advert_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="Advert", mappedBy="bookmark")
* @ORM\JoinColumn(name="advert_id", referencedColumnName="id")
*/
private $advertId;
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="user_id", type="integer", nullable=false)
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
public function setAdvertId($advertId)
{
$this->advertId = $advertId;
return $this;
}
public function getAdvertId()
{
return $this->advertId;
}
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
public function getUserId()
{
return $this->userId;
}
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Bookmark", inversedBy="advert")
* @ORM\JoinColumn(name="id", referencedColumnName="advert_id")
**/
private $bookmark;
public function setBookmark($bookmark)
{
$this->bookmark = $bookmark;
return $this;
}
public function getBookmark()
{
return $this->bookmark;
}
public function addBookmark($bookmark)
{
$this->bookmark->add($bookmark);
}
public function removeBookmark($bookmark)
{
$this->bookmark->removeElement($bookmark);
}
class BookmarkRepository extends EntityRepository
{
public function getBookmarksByUserIds($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.advertId', 'a')
->andWhere('a.userId=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
$adverts = $this->getEntityManager()->getRepository('Advert\Entity\User')->findBookmarksByUserId($user_id);
return new ViewModel(array(
'adverts' => $adverts,
));
}
class UserRepository extends EntityRepository
{
public function findBookmarksByUserId($userId)
{
$query =$this->_em->getRepository($this->getEntityName())->createQueryBuilder('b')
->join('b.bookmarks', 'a')
->join('b.adverts', 'c')
->andWhere('a.user=:userid')
->setParameter('userid',$userId)
;
return $query->getQuery()->getResult();
}
public function watchlistAction()
{
$user_id = $this->zfcUserAuthentication()->getIdentity()->getId();
// get User by reference (no queries executed)
$user = $this->getEntityManager()->getReference('Advert\Entity\User' , $user_id);
$adverts = $user->getBookmarks();
return new ViewModel(array(
'adverts' => $adverts,
));
}
还有一个好消息,当我删除一个广告时,书签会自动从书签数据库表中删除。现在我只需要知道如何添加书签,所以我将不得不改变我的服务。一旦我得到这个工作,我会更新这篇文章,让其他人看到
下面的更新3不工作
不幸的是,我没有得到以下3种方法在我的服务工作。显然,我现在必须选择1条记录,以检查状态(是否已添加书签)、删除书签(由AdverId定义)或添加书签(由AdverId定义)
我想答案在教程中,我一直在读,但我不完全理解它。我以前在使用bookmark实体时能够添加书签,但我不知道如何通过UserEntity添加书签。在这里,OneToOne关系是错误的选择,这意味着一个用户只能为一个广告添加书签,而一个广告只能由一个用户添加书签。因为一个用户应该能够为许多广告添加书签,并且一个广告应该由许多用户添加书签,所以您需要一个多人关系 如果使用数据库,创建映射表书签的想法是正确的。然而,您不需要将其创建为条令中的实体。您只需在名为“用户中的书签”的关联中添加广告即可显示书签广告,反之亦然: 用户实体:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Application\Entity\Advert", inversedBy="bookmarks", cascade={"persist"})
* @ORM\JoinTable(name="bookmarks",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="advert_id", referencedColumnName="id")}
* )
*/
private $bookmarks;
广告实体
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Application\Entity\User", mappedBy="bookmarks", cascade={"persist"})
* @ORM\JoinTable(name="bookmarks",
* joinColumns={@ORM\JoinColumn(name="advert_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private $bookmarks;
您可能也想阅读本文:
编辑:如何添加和删除书签
条令中的关联与字段完全不同,尽管它们都是实体中的属性。要处理书签,您可以直接在用户实体中添加或删除广告实体。例如:
$bookmarks = $user->getBookmarks();
$bookmarks[] = $advert;
这将向用户添加书签,并在您持久化
和刷新
后立即存储。为了使这更容易,您可以定义remover
和adder
:
使用语句:
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
以及守则:
/**
* @param Collection $bookmarks
*/
public function addBookmarks(Collection $bookmarks)
{
foreach ($bookmarks as $bookmark) {
$this->bookmarks->add($bookmark);
}
}
/**
* @param Collection $bookmarks
*/
public function removeBookmarks(Collection $bookmarks)
{
foreach ($bookmarks as $bookmark) {
$this->bookmarks->removeElement($bookmark);
}
}
您现在可以删除和添加集合中给出的广告,如下所示:
$user->addBookmarks(new ArrayCollection(array($advert)));
通常建议在许多关系中定义
adder
和remover
,因为许多条令组件都需要它们,例如非常有用的DoctrineObject,DoctrineModule用于Zend 2的增强器非常感谢。我想我之所以想到OneToOne是因为我来自“一个用户为一个广告添加书签”,所以我为书签创建了一个实体,并在我的服务中设置了书签。这完全有道理。从那以后,我想现在我必须加入广告桌。。。我将尝试你的解决方案,这是否意味着我必须删除书签实体,并以某种方式更改广告实体以添加书签?创建数据库模式是一件非常抽象的事情,我们在这里都会犯错误。是的,您可以删除书签实体,但无需更改广告实体即可添加书签。我将编辑答案,解释如何添加和删除书签感谢您的帮助!!我正在尝试实现您的解决方案,但还有一个问题,这是否意味着我也必须删除我的书签存储库?现在我犯了很多错误。我总是为每个DB表创建一个实体,外加一个存储库。我对书签的查询现在会全部进入广告库吗?这在很大程度上取决于你的查询。如果您想获取用户的书签,只需按id获取用户并调用getBookmarks
,如果您想获取为广告添加书签的用户,只需获取该广告并执行相同操作。请记住,书签本身已经不存在了——只有用户和广告之间的链接。因为您的结构已经改变,许多查询将不再有效,我将尝试使用t