在不相关的插入操作发生在另一个表中后,Mysql行被删除

时间:2015-01-27 15:52:28

标签: php mysql sql cakephp lamp

我会尝试尽可能简单地解释这一点,因为它涉及电子商务音乐网站。

所以我有一个基于CakePHP的应用程序网站,这是一个电子商务网站,我们销售在线音乐。

我遇到的问题是,在有人购买专辑后,该专辑的流派行会被删除,然后专辑不会包含任何详细说明它属于哪种音乐类型的行。

简单来说:

  1. id = 65的专辑包含5,7和10的流派。这是详细介绍流派的表格:

    album_genre(表格)

      fk_genre   fk_album
         12         87
         9          87
         5          65
         7          65
         10         65
    
  2. 用户购买id = 65的相册后,包含该album_genre个ID的fk_album表行将被删除。

          fk_genre   fk_album
             12         87
             9          87
    

    当用户购买相册时会发生什么?

    1. 用户使用信用卡或店内信用卡付款
    2. 付款如果被接受,则继续创建一个MusicItem行:

      2.1 MusicItem row contains:
             fk_album, fk_receipt, fk_user, downloads
      
    3. 继续增加相册表中的相册的销售数量

    4. 当有人购买相册或任何其他地方时,除了您在后端创建相册以添加到相册之外,没有代码附近或执行时编辑/处理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;
         }
        

4 个答案:

答案 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'?