php - 为联合学说 2 集合实现 setter/getter

标签 php mysql symfony doctrine-orm dql

我正在尝试在原始实体中为联合实体的学说集合中的特定项目创建简单的 getter 方法。

主要实体看起来像这样:

class Product
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

...

/**
 * @ORM\OneToMany(targetEntity="File", mappedBy="product")
 */
private $files;

}

并加入实体:

class PrankFile
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="Product", inversedBy="files")
 * @ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $product;

/**
 * @var string
 *
 * @ORM\Column(name="type", type="string", length=16)
 */
private $type;  

...

我在存储库类中的 DQL 非常简单:

    return $this->getEntityManager()
        ->createQuery('SELECT p, f FROM AppProductBundle:Product p INNER JOIN p.files f ORDER BY p.created DESC')
        ->setMaxResults($limit)
        ->getResult();

在文件实体类型字段中告诉我它是什么类型的文件(图像、声音、视频、演示等...) 当我希望打印出所有产品的列表并在产品详细信息旁边显示图像时,问题就来了,我不想为显示的每个产品循环遍历产品文件。

是否可以在产品实体上创建一些简单的 getter 来获取特定类型的文件? 或者也许为此创建更复杂的 DQL 查询会更好,如何做到这一点?

我不能只从 DQL 中的文件中获取图像记录,因为我需要某些产品的所有文件。

我们非常欢迎对此提供任何帮助。

最佳答案

您可以使用 filter api 直接筛选集合.如果集合还没有加载,Doctrine 将在 SQL 级别应用你的过滤器,给你最大的性能。如果集合已经预先加载,Doctrine 将过滤内存中的 ArrayCollection

use Doctrine\Common\Collections\Criteria;

class Product
{
    public function getFilesByType($type)
    {
        $criteria = Criteria::create()
            ->where(Criteria::expr()->eq("type", $type))
        return $this->files->matching($criteria);
    }
}

关于php - 为联合学说 2 集合实现 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222746/

相关文章:

php - 有没有办法从自定义 worpress 表中获取数据,我的查询获取表中最后更新的项目

php - Doctrine YML 映射引用

php - 对象方法的匿名函数

mysql - 在 Bash 脚本中使用浮点

php - 从生日日期列表到每个年龄段的总用户数组

mysql - 如何连接两个表

model-view-controller - 精简 Symfony2 Controller 和持久化逻辑

php - Symfony 2 - 如何保持两个 symfony 应用程序之间的模型同步

php - 更改图像大小 - PHP

PHP信号量替代?