duansaxf095988 2011-12-14 22:48
浏览 27
已采纳

Doctrine 2.1 - OneToMany关系,数据下载

I have two classes:

User:

/** @Entity @Table(name="users") */
class User {
    /**
     * @Id @GeneratedValue @Column(type="integer")
     * @var integer
     */
    protected $id;

    /**
     * @Column(type="string", length=20, unique=TRUE)
     * @var string
     */
    protected $login;

    /**
     * @OneToMany(targetEntity="News", mappedBy="author")
     */
    protected $news;    

    public function __construct() {
        $this->news = new \Doctrine\Common\Collections\ArrayCollection;
    }
}

and News:

/** @Entity @Table(name="news") */
class News {
    /**
     * @Id @GeneratedValue @Column(type="integer")
     * @var integer
     */
    protected $id;

    /**
     * @Column(type="string", length=100)
     * @var string
     */
    protected $title;

    /**
     * @Column(type="text")
     * @var string
     */
    protected $content;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="news")
     * @JoinColumn(referencedColumnName="id")
     */ 
    protected $author;
}

When I will make this code

$q = $this->db->createQuery('SELECT u FROM User u WHERE u.id = '.$id);
$user = $q->getSingleResult();

does the Doctrine will download all news (created by particular user) from database?

  • 写回答

1条回答 默认 最新

  • dongtangdao7232 2011-12-15 18:13
    关注

    It won't until you request a user's news by calling the news accessor method. If you rewrite your query as

    SELECT u, n FROM User u JOIN u.news n
    

    Then a user and his news will be all returned as the result.

    You can also check the query generated by doctrine using a logger:

    $config->setSQLLogger(new Doctrine\DBAL\Logging\EchoSQLLogger);
    

    PS: never do this: u.id = '.$id in queries to avoid sql injections. Instead, use placeholders:

    $q = $this->db->createQuery('SELECT u FROM User u WHERE u.id = :id');
    $q->setParameter('id', $id);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog