Symfony涉及许多对象查询

时间:2015-07-13 19:54:02

标签: php symfony

我正在尝试查询相关对象,但我遇到了一些问题。希望有人可以帮助我。

所以,我有两个ManyToMany相关实体

用户实体

/**
 * @ORM\ManyToMany(targetEntity="Contact", inversedBy="users")
 * @ORM\JoinTable(name="users_contacts")
 */
protected $contacts;

联系实体

/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="contacts")
*/
protected $users;

表:Users_contacts 正在关注

User_id **** Contact_id

1 ------------ 1
2 ------------ 1
3 ------------ 2
4 ------------ 2

我正在尝试将user_ids与查询contact_id

相关联

我已经尝试过多个不同的querybuilder

例如:

return $this->createQueryBuilder('u')
->innerJoin('u.contacts', 'c', 'WITH', 'c.id = :$user_id')
->setParameter('user_id', $user_id);

但没有结果,目前我有

$test = $this->getDoctrine()->getRepository('UserBundle:User')->findAll();

树枝

{% for user in test %}
   {{ users.id }}
{% endfor %} 

哪个让我联系contact_id,但是我如何得到与之相关的user_ids?谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

您应该可以通过$user->getContact()或在twig模板{{ user.contact }}内访问相关的多对多实体。您可以按照以下步骤操作,而不是单独编写getter:

  1. 您应该有2个主表和数据透视表:user,contact和user_has_contact
  2. user_has_contact应该包含两行:user_id和contact_id
  3. 在两个表格中创建FK
  4. Simple table

    CREATE TABLE IF NOT EXISTS `mydb`.`user` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(45) NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB;
    
    CREATE TABLE IF NOT EXISTS `mydb`.`contact` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(45) NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB;
    
    CREATE TABLE IF NOT EXISTS `mydb`.`user_has_contact` (
      `user_id` INT NOT NULL,
      `contact_id` INT NOT NULL,
      PRIMARY KEY (`user_id`, `contact_id`),
      INDEX `fk_user_has_contact_contact1_idx` (`contact_id` ASC),
      INDEX `fk_user_has_contact_user_idx` (`user_id` ASC),
      CONSTRAINT `fk_user_has_contact_user`
        FOREIGN KEY (`user_id`)
        REFERENCES `mydb`.`user` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_user_has_contact_contact1`
        FOREIGN KEY (`contact_id`)
        REFERENCES `mydb`.`contact` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    
    1. 映射表并生成实体。您可以使用逆向工程来完成此操作。 See documentation
    2. 您现在应该在User.php内部使用getter(也是setter)来检索关联的联系人。
相关问题