我有三张桌子:
架构示例:
客户有一个客户编号
项目可以有多个属于不同客户的价格
一个价格属于一个商品和一个客户
物品 - 型号:
class Item extends AppModel {
public $hasOne = 'Price';
//...
}
价格 - 型号:
class Price extends AppModel {
public $belongsTo = array(
'Item' => array(
'className' => 'Item',
'foreignKey' => 'id'
)
);
所以现在发生的事情是:One Item为3个不同的客户提供3种不同的价格。我自动获得所有项目(一项3次),但我只想要当前登录客户的项目(由customer_number标识,该表中显示的字段:
有什么建议吗?谢谢。
答案 0 :(得分:2)
首先,请遵循CakePHP约定:您的customers
表应该有一个id
列。并且您的prices
表应该有一个customer_id
列,这是您的customers
表的外键。如果您需要一个人性化的“客户编号”,与客户的ID(用于识别该客户)分开,那么它可以是客户表中的一个额外字段,但不应该复制到价格表中。
其次,您已在Item模型中定义了Item hasOne Price。这实际上不是真的 - 一个物品有很多价格 - 每个顾客一个。
在这种情况下你所追求的是HasMany through关系。阅读该文档 - 你最终会得到类似的东西:
// Customer.php
class Customer extends AppModel {
public $hasMany = array(
'Price'
);
}
// Item.php
class Item extends AppModel {
public $hasMany = array(
'Price'
);
}
// Price.php
class Price extends AppModel {
public $belongsTo = array(
'Customer', 'Item'
);
}
您的价格表需要customer_id
列和item_id
列。
接下来,当返回当前登录客户的项目时,您可以在您的价格模型上查找,加入您的商品模型,其中price.customer_id等于相关客户的ID。