Symfony2存储库和自定义连接

时间:2012-03-11 08:08:59

标签: mysql symfony doctrine-orm

好的,我在数据库中有几个表,我无法将结构更改为。据说我想要完成的是让控制器与实体交互,进行自定义连接并返回结果。

更多细节:

第一张表有id,用户名

第二张表有user_id,stat1,stat2,stat3

我想要的是搜索表1中加入表2的所有用户。我可以用简单的MySQL很容易地做到这一点但我想知道如何以symfony的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

您需要告诉Doctrine在哪里可以找到每条信息,以便每次实例化一个新的User对象时它都可以加载所有属性。换句话说,您需要添加自定义Doctrine映射信息。假设您将映射信息作为内联注释添加到用户的模型类中,代码将如下所示:

//in User.php

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="first_table_name")
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $username;

    /**
     * @ORM\OneToMany(targetEntity="UserStats")
     */
    protected $stats;

    //also define getters and setters for the above, of course
}



//in UserStats.php

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="table_two_name")
 */
class UserStats
{
     /** 
      * I'm pretty sure doctrine will require that you add an Id column to table_two, 
      * which is what this is. If you can't add an Id, I'm not sure it'll work...
      * @ORM\Id 
      * @ORM\Column(type="integer")
      * @ORM\GeneratedValue 
      */
     protected $id;

     /** 
      * @ORM\ManyToOne(targetEntity="User") 
      * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
      */
     protected $user;

     /** 
      * The below assumes your stats are strings. If not, change the type attribute.
      * @ORM\Column(type="string")
      */
     protected $stat1;

     /** 
      * @ORM\Column(type="string")
      */
     protected $stat2;

     /** 
      * @ORM\Column(type="string")
      */
     protected $stat3;

     //include appropriate getters/setters here too
}