doctrineの多対多の関係からフィルタ結果を取得する必要があります。Doctrine - ManytoManyフィルタ結果
Class Users extends RecordItem {
/**
* @Id @Column(type="integer") @GeneratedValue
* @var int
**/
protected $id;
/**
* @ManyToMany(targetEntity="Company")
* @JoinTable(name="users_join_company",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="company_id", referencedColumnName="id")}
* )
*/
protected $companys;
/**
* @Column(type="string", length=100)
* @var string
*/
protected $username;
//edit - > added array collection - forgotten
public function __construct() {
$this->companys = new ArrayCollection();
}
}
Class Company extends Recorditem {
/**
* @Id @Column(type="integer") @GeneratedValue
* @var int
**/
protected $id;
/**
* @Column(type="string", length=100)
* @var string
*/
protected $company_name;
}
これまでのところ、私はすべての会社に次のコードを照会できました。フィルタを追加する適切な方法はありますか?例:あなたの場合
$s_program = $qb->getQuery()->setMaxResults(1)->getOneOrNullResult();
は試してみてください。配列コレクション内の3企業がありますが、あなたはこのようなものを使用することができ、クエリビルダで
$user = $entityManager->getRepository('Users')->findOneBy(['id'=>1]);
$companys = $user->companys; // hope to return only company with the id 1
foreach($companys as $company){
echo $company->company_name;
}
はい、あなたは間違いなく、コードを単純化しようとしている間にArrayCollectionが構造体を削除しています。ありがとうございました。 – WyHowe