首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有复合主键的Yii模型

具有复合主键的Yii模型
EN

Stack Overflow用户
提问于 2012-01-24 18:34:25
回答 2查看 22.7K关注 0票数 7

我的MySQL表的主列由两列组成: space_id (整数)和day (日期)。

代码语言:javascript
复制
CREATE TABLE `ck_space_calendar_cache` (
  `space_id` int(11) NOT NULL,
  `day` date NOT NULL,
  `available` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `price` decimal(12,2) DEFAULT NULL,
  `offer` varchar(45) DEFAULT NULL,
  `presale_date` date DEFAULT NULL,
  `presale_price` decimal(12,2) DEFAULT NULL,
  `value_x` int(11) DEFAULT NULL,
  `value_y` int(11) DEFAULT NULL,
  PRIMARY KEY (`space_id`,`day`),
  KEY `space` (`space_id`),
  CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它在原始SQL中工作得很好,如果我试图创建一个副本,它会报错,但让我在同一天或相同的space_id创建行。

然而,在Yii中,当使用新对象()和保存()时,它会报错好像"space_id“必须是唯一的。

如果重要的话,我使用"Giix“来生成模型。

我尝试将此代码添加到模型中,但没有帮助:

代码语言:javascript
复制
public function primaryKey(){
            return array('space_id', 'day');
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 02:25:12

将此代码添加到您的ActiveRecord类中是可以的,但不应该是必需的,因为Yii已经从您的MySQL表声明中获得了该信息。

代码语言:javascript
复制
    public function primaryKey(){
       return array('space_id', 'day');
    }

当Yii抱怨"space_id“是唯一的时,giix可能已经在您的ActiveRecord类的规则()中添加了一个验证规则。在保存ActiveRecord之前会检查这些规则,只有在所有规则都正常的情况下才会保存。有关更多信息,请阅读Data Validation section of Definitive Guide

票数 12
EN

Stack Overflow用户

发布于 2012-01-27 14:37:23

据我所知,自从Yii 1.1以来,Gii不再支持复合主键,这让许多开发人员感到沮丧。除了将数组作为主键返回之外,您的代码中还需要进行其他文档记录不多的更改。

The best explanation I found was in this discussion in the Yii forum.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8985304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档