【发布时间】:2016-06-10 08:31:22
【问题描述】:
在一个项目中,我有两个模型,产品和包。包可以看作是产品的容器,为了定义包中的项目,我创建了一个模型 PackageItem(它基本上是一个产品,所以它使用同一个表)。现在产品(以及 PackageItems)具有可翻译的字段,例如标题和描述。
ProductsTable.php 包含:
$this->addBehavior('Translate', [
'fields' => ['title', 'description'],
'translationTable' => 'products_translations'
]);
$this->belongsToMany('PackageItems', [
'foreignKey' => 'package_id',
'joinType' => 'LEFT',
'joinTable'=>'products_package_items'
]);
PackageItemsTable 包含:
$this->table('products');
$this->addBehavior('Translate', [
'fields' => ['title', 'description'],
'translationTable' => 'products_translations'
]);
$this->belongsTo('Products', [
'foreignKey' => 'package_item_id',
'joinType' => 'LEFT'
]);
使用 TranslateBehavior,我可以返回 Product 的翻译,但我不知道如何编写查询,我还需要返回 PackageItems 的翻译。这是我当前的查询:
$package = $this->Products->find('translations')
->where(['business_id'=>$q['business_id'], 'id'=>$id, 'type'=>'Package'])
->contain([
'PackageItems'=>[
'Prices'=>function($q) {
return $q->where(['product_id'=>$this->product_id]);
}
]
])
->first();
【问题讨论】:
-
从您的代码示例中,您的
PackageItemsTable类似乎没有使用Translate行为,因此不清楚您的问题是什么,可能缺少的行为,或者您不知道如何为容器设置查找器? -
对不起,我忘记粘贴了。我确实也将翻译行为附加到 PackageItems,这是我正在努力解决的查询
-
请把它放在你的问题中,这样人们就可以看到你是如何配置它的,并重现确切的问题。
标签: php cakephp internationalization associations cakephp-3.0