我试图找到合适的方式来处理下一个表格设置。
产品是我的主表并包含一个id。 UsersCarts有一个字段product_id和belongsTo它也加载产品。
到目前为止没问题。我还有一个表ProductsNettoDeals,我存储可能的netto价格。在productcontroller中加载产品时,此表具有自己的id和hasOne关系的product_id。
当我加载UsersChart时,它加载了belongsTo产品,但我也希望与表ProductsNettoDeals关联,但是这个表通过id(products.id = products_netto_deals.product_id)与产品连接。我找不到查询构建器的正确语法或关联。到目前为止我所拥有的:
// src/Model/Table/UsersCartsTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\Validation\Validator;
class UsersCartsTable extends Table
{
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
$this->belongsTo('Products');
$this->belongsTo('ProductsNettoDeals');
}
public function validationDefault(Validator $validator)
{
return $validator
->notEmpty('user_id', 'A user id is required')
->notEmpty('product_id', 'A product id is required');
}
public function findCart(Query $query, array $options)
{
$query
->where([
'user_id' => $options['user_id'],
//'active' => '1'
])
->contain(['Products','ProductsNettoDeals'])
//->select(['product_id','created','products.name','products.price','products.delivery_time']);
;
return $query;
}
}
在此设置中,我总是遇到id的匹配错误的问题。这些产品很好。 users_carts.product_id与products.id链接,但products_netto_deals.product_id应与product.id链接,而不与users_carts.id链接。我尝试了外键和绑定,但两者都是解决方案的一部分。
除了这个问题,当连接关联的ProductsNettoDeals时,我在激活注释的active =>时出错。 ' 1&#39 ;.此字段指示记录是否处于活动状态且应加载。 products_netto_deals表格中存在相同的字段,表示netto价格是否有效。
错误:SQLSTATE [23000]:完整性约束违规:1052列'活动' in where子句不明确
任何人都可以指出我正确的方向,正确的关联方式和错误警告。谢谢你。
答案 0 :(得分:0)
CakePHP使用连接来获取关联,以加快信息检索过程。这意味着当在不同的表中重复列名称时,您需要在查询子句中为列名添加前缀"
而不是:
$query->where(['active' => true]);
执行:
$query->where(['UsersCarts.active' => true])