【发布时间】:2016-07-24 09:42:10
【问题描述】:
我正在创建 symfony 网络应用程序,但在对收件箱进行适当的 dql 查询时遇到问题。 这是导致问题的实体代码:
class Message
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @OneToOne(targetEntity="User")
* @JoinColumn(name="fromUser", referencedColumnName="id")
*/
protected $fromUser;
/**
* @ORM\Column(type="text")
*/
protected $fromEmail;
/**
* @return mixed
*/
/**
* @OneToOne(targetEntity="User")
* @JoinColumn(name="toUser", referencedColumnName="id")
*/
protected $toUser;
/**
* @ORM\Column(type="text",length=255)
*/
protected $subject;
/**
* @ORM\Column(type="datetimetz")
*/
protected $date;
/**
* @ORM\Column(type="text")
*/
protected $toEmail;
/**
* @ORM\Column(type="text")
*/
protected $content;
/**
* @ORM\Column(type="boolean")
*/
protected $sent;
/**
* @ORM\Column(type="boolean")
*/
protected $spammed;
/**
* @ManyToMany(targetEntity="View")
* @JoinTable(name="messages_views",
* joinColumns={@JoinColumn(name="message_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="view_id", referencedColumnName="id", unique=true)}
* )
*/
protected $view;
class View extends CollectionType
{
public function __construct($user)
{
$this->user = $user;
$this->trashed = false;
$this->deleted = false;
$this->seen = false;
}
/**
* @ORM\Column(type="boolean")
*/
protected $trashed;
/**
* @ORM\Column(type="boolean")
*/
protected $deleted;
/**
* @ORM\Column(type="boolean")
*/
protected $seen;
/**
* @ManyToOne(targetEntity="User")
* @JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
}
$view 是类 ArrayCollection() 和一对多关系。 我想选择字段“where $toUser = :me”,其中包含 $view where $view->user = :me and $view->trashed = false”(如果有两个 $view's(不可能/预期)选择第一个找到) 提前感谢您的宝贵时间。
编辑: 目前我有这样的事情
$get = $this->getEntityManager()
->createQuery('
SELECT m
FROM MonoAdminBundle:Message m
WHERE m.userTo = :me AND m.sent = true
AND
ORDER BY m.date DESC
')
->setParameter('me', $me->getId())->getArrayResult();
$ret = new \Doctrine\Common\Collections\ArrayCollection();
foreach ($get as $message) {
if ($message->getSpammed() === false) {
foreach ($message->getView() as $view) {
if ($view->getUser() == $me) {
if ($view->getTrashed() === false) {
$ret->add($message);
}
}
}
}
}
但这不是一个好主意,因为我想使用分页器。
【问题讨论】:
标签: php symfony one-to-many dql