无法删除数据库行,因为它具有外键

时间:2016-07-27 20:42:18

标签: php mysql angularjs

我正在使用angular和php构建项目,我有一个"客户"我可以检索所有数据的表,但删除一行时遇到问题。如果"客户"有"订单",我无法删除(行)"客户"。如果"客户" dosn没有"命令",我可以删除没有问题。这是我得到的错误phpmyadmin =#1451 - 无法删除或更新父行:外键约束失败。  有人可以帮忙吗?

用于删除的PHP代码:

<?php
 header('Content-Type: text/html; charset=utf-8');
$connect=mysqli_connect("localhost", "root", "", "hamatkin");

  include_once 'Customer.php';
mysqli_query($connect,"SET character_set_client = utf8");
mysqli_query($connect,"SET character_set_connection = utf8");
mysqli_query($connect,"SET character_set_results = utf8");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$data = json_decode(file_get_contents("php://input"));
$x=$data->customer_id;
 $customer_id = $data->customer_id;
$del = "DELETE FROM customers WHERE customer_id=".$customer_id;
   mysqli_query($connect, $del);
 }
$newURL = "/hamatkin/#/customerCards";
header('Location: '.$newURL);
?>

控制器:

  $scope.delete = function(deletingId, $index) {

       var params = $.param({"customer_id":deletingId});
      $http.post('api/customers-tab/delete-customer.php',{"customer_id":deletingId})
          .success(function(data){
           var arr=JSON.parse(JSON.stringify(data));
            $scope.customerDetails = arr;
             var arr2 = arr.split(",");
              arr2.splice($index, 1);
              $route.reload();
        });
      }

html代码:

<tr ng-repeat="x in customers | filter:search_query | orderBy: order_query:reverse_query">

            <td>{{ x.customer_id}}</td>
            <td>{{ x.kind_Of_Customer}}</td>
            <td>{{ x.full_name}}</td>                <td> {{ x.id}} </td>
            <td> {{ x.city}} </td>

            <td><a href="/hamatkin/index.html#/customerCardDetails/{{ x.customer_id}}"  class="btn btn-primary btn- active">הצג פרטי לקוח </a></td>

            <td><a ng-click="delete(x.customer_id, $index)"  class="btn btn-primary btn- active">מחיקה</td>

2 个答案:

答案 0 :(得分:3)

您的架构受到约束,要求您在删除客户之前删除所有客户的订单。只要客户保留任何订单,MySQL就不会让您删除客户。

删除客户行的业务含义是什么?许多客户跟踪系统不会删除这样的行;相反,他们会添加Question: 列,并在客户不再有效时将其设置为零。实际上,删除具有订单历史记录的客户可能会在您尝试调解内容时造成混淆,可能在年底。

如果要清理开发或测试数据库,只需在删除客户行之前删除订单行。

如果您使用的是最近的MySQL版本,则可以在约束的定义中指定activeshown here。但这是一个粗略的方法。

答案 1 :(得分:2)

您可以向表中添加CascadeDelete,以便在删除父记录时也会删除子记录。您还可以编写代码以使用所选客户的密钥字段首先删除后台订单,然后删除客户。但Angular不会覆盖您的数据库约束。