我有一个未决的 Sonata 电子商务项目,需要了解它是如何工作的。我想管理 Doctrine/mongoDB 中的产品变化,同时将所有其他数据留给 Doctrine/MySQL。所以我用演示部分安装了沙箱,并进行了跟踪。
这使我找到了具有 getSelectSQL() 方法的 ORM\Persiters\BasicEntityPersister。
例如,在编辑旅行产品http://mysite/app_dev.php/admin/sonata/product/product/526/edit
时,$conditionSql 变量分配了以下 sql 条件:
t0.id = ? AND t0.product_type IN ('sonata.ecommerce_demo.product.travel')
当我在返回之前输出 getSelectConditionSQL() 方法时,我有
t0.id = ?
所以,问题是:AND t0.product_type IN ('sonata.ecommerce_demo.product.travel')
生成的部分在哪里,最重要的是,IN() 语句来自哪里?
我真的必须知道,因为当我尝试将 Document 作为参数时,
<service id="sonata.ecommerce_demo.product.travel.manager" class="Sonata\ProductBundle\Document\ProductManager">
<argument>Application\Sonata\ProductBundle\Document\Travel</argument>
<argument type="service" id="doctrine_mongodb" />
</service>
我最终得到一个空的 IN() 语句。
感谢任何帮助...</p>