Я строю проект с угловым и php, у меня есть таблица "Customers", в которой я могу получить все данные, но у меня есть проблема с удалением одной строки. если у "Заказчика" есть "Заказы", я не могу удалить (строку) "Клиент". если у "Заказчика" нет "заказов", я могу удалить без проблем. Это ошибка, которую я получаю на 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>
Ваша схема привязана к ограничению, требующему удаления всех заказов клиентов перед удалением клиента. Пока какие-либо заказы остаются для клиента, MySQL не позволит вам удалить клиента.
Каков бизнес-смысл удаления строки клиента? Многие системы отслеживания клиентов не удаляют такие строки; вместо этого они добавляют active
столбец и устанавливают его на ноль, когда клиент больше не активен. Фактически удаление клиента с историей заказа может вызвать путаницу, когда вы пытаетесь согласовать материал, возможно, в конце года.
Если вы очищаете базу данных разработки или тестирования, просто удалите строки порядка перед удалением строки клиента.
Если вы используете последнюю версию MySQL, вы можете указать ON DELETE CASCADE
в определении вашего ограничения, как показано здесь. Но это отрывочный путь.
Вы можете добавить CascadeDelete в свою таблицу, чтобы при удалении родительской записи дети также удалялись. Вы также можете написать код, чтобы использовать поле ключа у выбранного Клиента, чтобы сначала удалить заказы в фоновом режиме, а затем удалить Клиента. Но Angular не отменяет ограничений базы данных.