[英]Query with Criteria Exception error in doctrine2,Symfony2
I have a problem in symfony2 and doctrine2. 我在symfony2和doctrine2中有问题。 When I add a Criteria exception, it doesn't appear like I want.
当我添加一个Criteria异常时,它看起来不像我想要的那样。 This is the code:
这是代码:
Model 模型
/**
* @ORM\ManyToMany(targetEntity="users",inversedBy="friends",cascade={"ALL"})
* @ORM\JoinTable(name="friends",
* joinColumns={@ORM\JoinColumn(name="friend_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* )
*/
private $friendsof;
public function getusersre() {
$criteria = new Criteria();
$criteria->Where($criteria->expr()->eq('accepted', '1'));
return $this->friendsof->matching($criteria);
}
Output 产量
SELECT te.id AS id, te.email AS email, te.username AS username
FROM users te JOIN friends t ON t.user_id = te.id
WHERE t.friend_id = ? AND te.accepted = ?
I want that it appear like this: 我希望它看起来像这样:
WHERE t.friend_id = ? AND t.accepted = ?
Doctrine generates intermediate table for Many to Many
relationship. 教义
Many to Many
关系生成中间表。 And you can't add any field to that table. 而且您不能在该表中添加任何字段。 I mean field
accepted
. 我的意思是现场
accepted
。 Also you have three tables: 另外,您有三个表:
In your getusersre
function you want to try get friends. 在您的
getusersre
函数中,您想尝试结识朋友。 As I understood it is impossible to add accepted
field for your criteria as you wanted. 据我了解,无法根据需要为您的条件添加
accepted
字段。
Also I have changed your structure. 我也改变了你的结构。 What do you think about it?
你怎么看待这件事?
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=255, unique=true)
*/
private $username;
/**
* @ORM\OneToMany(targetEntity="Friend", mappedBy="userId")
*/
private $friends;
//Other fields, getters and setters.
}
class Friend
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $userId;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
* @ORM\JoinColumn(name="friend_id", referencedColumnName="id")
*/
protected $friendId;
/**
* @ORM\Column(name="accepted", type="boolean")
*/
protected $accepted;
//Other fields, getters and setters
}
The name of Friend
entity is not solid. Friend
实体的名称不是固定的。 You can use FriendRelationship
. 您可以使用
FriendRelationship
。
Also,function getAcceptedFriends
will like that. 另外,函数
getAcceptedFriends
会喜欢的。
public function getAcceptedFriends()
{
$cr = Criteria::create();
$cr->andWhere($cr->expr()->eq('accepted', 1));
return $this->friends->matching($cr);
}
Or 要么
public function getAcceptedFriends()
{
$friends = [];
/** @var Friend $friend */
foreach ($this->friends as $friend) {
if ($friend->getAccepted()) $friends[] = $friend;
}
return $friends;
}
You can use like that. 您可以那样使用。
foreach($user->getAcceptedFriends() in $friendRelationship){
// $friendRelationship is a instance of Friend.
$username = $friendRelationship->getFriendId()->getUsername();
}
In twig 在树枝上
{% for fr in user.acceptedFriends %}
{{ fr.friendId.username }}
{% else %}
{{ 'No friend' }}
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.