Symfony2 twig打印来自2个非相关表的查询值

时间:2015-06-28 04:08:00

标签: sql symfony twig dql

我有2个实体:“请求”和“合作伙伴” 请求和合作伙伴之间存在1to1关系,因此请求表中有partner_id字段 我想显示合作伙伴列表,但我需要从“请求表”中的“价格”字段中获取值

在我的控制器上,我有这个查询:

$listPartners = $em
    ->getRepository('OandPboBundle:Partners')
    ->createQueryBuilder('p')
    ->select('p')
    ->leftJoin('OandPboBundle:Requests', 'r', 'WITH', 'r.partners = p.id')        
    ->where('p.date LIKE :date AND p.active = :active')
           ->setParameter('date', '%'.$year.'-'.$month.'%')
           ->setParameter('active', 1)

    ->orderBy('p.date', 'DESC')
    ->addOrderBy('p.id', 'DESC')
    ->getQuery()
    ->getResult();

在我的TWIG文件中,我有

{% for partners in listPartners %}
            <tr>
                <td>{{ partners.id }}</td>
                <td>{{ partners.price }}</td>
            </tr>
{% endfor %}

当然有一个错误,因为他们说“合作伙伴”中没有“价格”字段(当然我想从“请求”中获取)

有办法吗?

EDIT 我发布了我的2个实体 实体“请求”

class Requests

{   / **    * @ORM \ OneToOne(targetEntity =“OandP \ boBundle \ Entity \ Partners”,cascade = {“persist”})      * @ORM \ JoinColumn(nullable = false)    * /   私人$ partners;

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

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

我的实体“合作伙伴”

/**

*合作伙伴  *  * @ORM \ Table(name =“partners”)  * @ORM \ Entity(repositoryClass =“OandP \ boBundle \ Entity \ PartnersRepository”)  * / 班级合作伙伴 {

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

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

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

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

2 个答案:

答案 0 :(得分:0)

如果存在单向关系,则无法获得它。我可以建议创建一个由Requests获取Partners对象的Twig函数,可能是这样的:

{% for partners in listPartners %}
    {% set requests = requests_by_partners(partners) {# this is a custom twig function, you can create it by extending the Twig, http://symfony.com/doc/current/cookbook/templating/twig_extension.html #} %}
    <tr>
        <td>{{ partners.id }}</td>
        <td>{{ requests.price }}</td>
    </tr>
{% endfor %}

或将您的关系声明为双向关系,这样您就可以获得合作伙伴的请求:

{% for partners in listPartners %}
    <tr>
        <td>{{ partners.id }}</td>
        <td>{{ partners.requests.price }}</td>
    </tr>
{% endfor %}

答案 1 :(得分:0)

在合作伙伴实体中定义字段$请求

/**
* @ORM\OneToOne(targetEntity="OandP\boBundle\Entity\Requests", mappedBy="partners")
*/
private $requests;

在你的Twig中,只需尝试:

{% for partners in listPartners %}
    <tr>
        <td>{{ partners.id }}</td>
        <td>{{ partners.requests.price }}</td>
    </tr>
{% endfor %}