'user'と 'friends'の2つのテーブルを仮定します。Doctrine 2 QueryBuilder
'user'
column: id
column: name
'friends'
column: user_id
column: user2_id
友人テーブルの両方の列は、ユーザーテーブルIDの列に対応します。
ここでは、次のように部分名でユーザーを検索することができます。今\ユーザー\エンティティ\ユーザーユーザAのオブジェクトを想定し
$query='jim';
$result=$em->getRepository('\User\Entity\User')
->createQueryBuilder('u')
->where('u.name like :match')
->setParameter('match', $query.'%')
->setMaxResults(5)
->getQuery()
->getResult();
は、どのように私は、ユーザAが既に持つない友人であるすべてのユーザーのための部分的な文字列の一致をしますか?
EDIT追加エンティティ定義
/**
* User
*
* @ORM\Table(name="user", uniqueConstraints={@ORM\UniqueConstraint(name="name_key", columns={"name"})})
* @ORM\Entity
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, precision=0, scale=0, nullable=false, unique=false)
*/
private $name;
}
/**
* UserFriends
*
* @ORM\Table(name="user_friends", indexes={@ORM\Index(name="user_id_key", columns={"user_id"}), @ORM\Index(name="friend_user_id_key", columns={"friend_user_id"})})
* @ORM\Entity
*/
class UserFriends
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \User\Entity\User
*
* @ORM\ManyToOne(targetEntity="User\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="friend_user_id", referencedColumnName="id", nullable=true)
* })
*/
private $friendUser;
/**
* @var \User\Entity\User
*
* @ORM\ManyToOne(targetEntity="User\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
* })
*/
private $user;
}`
テーブルの列ではなく、エンティティの定義を投稿できますか? – lxg