2

我有三张桌子:

  • 顾客
  • 价格
  • 项目

架构示例:

客户有客户编号

项目可以有多个价格属于不同的客户

一个价格属于一个项目和一个客户

产品型号:

class Item extends AppModel {
    public $hasOne = 'Price';
    //...
}

价格模型:

class Price extends AppModel {

    public $belongsTo = array(
        'Item' => array(
            'className' => 'Item',
            'foreignKey' => 'id'
        )
    );

所以现在发生的事情是:一件商品有 3 个不同的价格,用于 3 个不同的客户。我自动获取所有项目(一个项目 3 次),但我只想要当前登录的客户的项目(由 customer_number 标识,此表中显示的字段:

  • 顾客
  • 价格

有什么建议么?谢谢你。

4

1 回答 1

2

首先,遵循 CakePHP 的约定:你的customers表应该有一个id列。你的prices表应该有一个customer_id列,它是你的表的外键customers。如果您需要一个人性化的“客户编号”,与客户 ID 分开,用于识别该客户,那么它可以是客户表中的一个额外字段,但不应将其复制到价格表中。

其次,您在 Item 模型中定义了 Item hasOne Price。这实际上是不正确的 - 一个项目有很多价格 - 每个客户一个。

在这种情况下,您所追求的是HasMany 直通关系。阅读该文档 - 你最终会得到这样的东西:

// 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。

于 2013-09-23T11:22:03.750 回答