Symfony2自定义查询仅返回1个记录,应返回多个记录



我有一个我一起加入的3个表," paskureorderproductsstatus,product and potaway"桌子。

paskureordorproductsstatus表

id  | product_id | 
----------------------
10  | 1      |

产品表

id  | Name            | 
---------------------------
1   | Acme Product 123

putaway表

id  | product_id | 
----------------------
100 | 1
101 | 1

我能够将数据输出到屏幕上,我遇到的问题是它仅从我的Putaway表返回1行。它应该像这样返回2行...

Acme Product 123
        100 - Acme Product 123
        101 - Acme Product 123

这是我的CustomQuery。我究竟做错了什么?

$query = $this->getEntityManager()
->createQuery('
SELECT      pops, pr, pa
FROM        WICPurchaseOrderBundleEntityPurchaseOrderProductsStatus pops
LEFT JOIN   pops.product pr
LEFT JOIN   pr.putAway pa
WHERE       pops.inventoryLocation = :id
AND         pops.account = :account_id
')
->setParameter('id', $id)
->setParameter('account_id', $account_id);

我的设置中只有一些信息。在我的产品实体中,我有一个OneTomany协会的Putaway表。

/**
 * @ORMOneToMany(targetEntity="WICInventoryBundleEntityPutAway", mappedBy="product", fetch="EAGER")
 */
protected $putAway;
public function __construct()
{
    $this->putAway = new ArrayCollection();
}

这是我的树枝模板:

{% for action in productActions %}
    <tr>
        <td>{{ action.product.id }}</td>
        <td>{{ action.product.sku }}</td>
        <td>{{ action.product.name }}</td>
        <td>{{ action.qty }}</td>
        <td>0</td>
    </tr>
    <tr>
        <td colspan="5">
            <div class="row-fluid">
                <div class="span2">
                    <table class="table table-striped table-bordered">
                        <thead>
                        <tr>
                            <th>Purchase Order</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td></td>
                        </tr>
                        </tbody>
                    </table>
                </div>
                <div class="span10">
                    <table class="table table-bordered" id="put_away_{{ action.product.id }}">
                        <thead>
                        <tr>
                            <th>Put Away Location</th>
                            <th>Quantity</th>
                            <th>Date</th>
                            <th>Entered By</th>
                        </tr>
                        </thead>
                        <tbody>
                        {% for putAway in action.product.putAway %}
                            <tr class="info">
                                <td>{{ putAway.inventoryLocation.name }}</td>
                                <td>{{ putAway.qty }}</td>
                                <td>{{ putAway.created|date("m/d/Y") }}</td>
                                <td>{{ putAway.createdBy.firstName }} {{ putAway.createdBy.lastName }}</td>
                            </tr>
                        {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </td>
    </tr>
{% endfor %}

我看到您已经定义了以下关系:

/**
 * @ORMOneToMany(targetEntity="WICInventoryBundleEntityPutAway", mappedBy="product",     fetch="EAGER")
 */
protected $putAway;

mappedBy="product"告诉我PutAway实体具有product属性 - 可能定义为@ManyToOne(相反)。

您可能知道,在关系中,如果您省略了@JoinColumn(或多个对数量的@JoinTableDoctrine将假设默认列名称并尝试加入表。但是,这可能会产生意外的结果(例如您的结果)。

现在重要的部分:如果要确保使用正确的列,则需要在关系的一侧设置@JoinColumn注释。在您的示例中:

产品实体

/**
 * @ORMOneToMany(targetEntity="WICInventoryBundleEntityPutAway", mappedBy="product",     fetch="EAGER")
 * @ORMJoinColumn(name="id", referencedColumnName="id_product")
 */
protected $putAway;

替代解决方案是:

putaway Entity

/**
 * @ORMManyToOne(targetEntity="WICInventoryBundleEntityProduct", inversedBy="putAway", fetch="EAGER")
 * @ORMJoinColumn(name="id_product", referencedColumnName="id")
 */
protected $product;

@JoinColumn注释中:

  • name代表本地(HM,一些更好的术语)列
  • referencedColumnName代表外国列

这个可以工作吗?

相关内容

  • 没有找到相关文章

最新更新