我会尝试尽可能简单地解释这一点,因为它涉及电子商务音乐网站。
所以我有一个基于CakePHP的应用程序网站,这是一个电子商务网站,我们销售在线音乐。
我遇到的问题是,在有人购买专辑后,该专辑的流派行会被删除,然后专辑不会包含任何详细说明它属于哪种音乐类型的行。
简单来说:
id = 65的专辑包含5,7和10的流派。这是详细介绍流派的表格:
album_genre(表格)
fk_genre fk_album
12 87
9 87
5 65
7 65
10 65
用户购买id = 65的相册后,包含该album_genre
个ID的fk_album
表行将被删除。
fk_genre fk_album
12 87
9 87
当用户购买相册时会发生什么?
付款如果被接受,则继续创建一个MusicItem行:
2.1 MusicItem row contains:
fk_album, fk_receipt, fk_user, downloads
继续增加相册表中的相册的销售数量
当有人购买相册或任何其他地方时,除了您在后端创建相册以添加到相册之外,没有代码附近或执行时编辑/处理album_genre
表格商店...
我怀疑这可能是数据库的问题?我似乎无法在日志或调试日志或其他任何内容中找到问题= /需要一些帮助来解决此错误。
更新
SHOW TRIGGERS
并且空了。发现album_genre
有3个约束,即使它只有2列:
- Columns are: fk_album, fk_genre
- Constraints are `PRIMARY`, `FOREIGN KEY` and `FOREIGN KEY`
更新2:
显示第3步中的代码片段
public function incrementSales($idAlbum)
{
$parameters = array(
'fields'=>array('Album.album_sales'),
'recursive'=>-1,
'conditions'=>array('Album.id_album'=>$idAlbum)
);
$album = $this->find('first',$parameters);
$newQuantity = $album['Album']['album_sales'] + 1;
$this->read(null,$idAlbum);
$this->set('album_sales',$newQuantity);
if($this->save())
return true;
else
return false;
}
答案 0 :(得分:1)
我终于明白了,
Top修复了我重新创建表格的问题。旧的(有问题的)表看起来像这样:
fk_genre fk_album
5 37
9 37
12 89
3 89
67 89
新的(工作)表结构如下所示:
id fk_genre fk_album
1 5 37
2 9 37
3 12 89
4 3 89
5 67 89
问题与表格中的一些混淆有关,没有设置INDEX并且只有两个PRIMARY键fk_genre和fk_album。
我想如果我添加了一个索引,它肯定会有助于数据结构和顺序,让每一行区别于INDEX id,而不是fk_genre和fk_album的组合,并且它有效!
修改强>
忘记提到处理该表的AlbumGenre.php的Model类没有指定主键设置,所以我也猜测CakePHP对于什么用作主键并且可能使用了很困惑这两者中的任何一个。
public $primaryKey = 'id';
答案 1 :(得分:0)
我先检查触发器。 听起来你的代码试图根据销售减少你的专辑库存,这显然是错误的。所以我要看看触发器。
另外,我会为你的代码grep你对album_genre表的引用。它可能是PHP销售过程中被调用的东西。
答案 2 :(得分:0)
检查/搜索任何级联关键字。我的猜测是删除的记录,与使用级联的另一个表有关系。
答案 3 :(得分:0)
检查/搜索任何级联关键字。我的猜测是删除的记录,与使用级联的另一个表有关系。
你是否用root尝试'SHOW_TRIGGERS'?