2013-09-19 3 views
0

Кроме того, все знают, ссылается ли строка базы данных на другую, ее нельзя удалить, если только одна ссылка не удаляется первым.Как проверить, все ли объект/строка ссылается на другой объект?

Я использую Yii в течение некоторого времени, и у меня есть вопрос, вот мой сценарий:

Предположим, что вы загрузили два типа объектов:

$object1 = Model1::model()->findByPk($pk); 
$object2 = Model2::model()->findByPk($pk); 

Теперь каждый $ object1 имеет внешние ключи, ссылающиеся на $ object2, и все мы знаем, что $ object2 не может быть удален, если $ object1 еще не был удален с учетом отношения fk. Есть ли способ/функция в Yii, который проверяет наличие других объектов, которые все еще ссылаются на $ object2?

нравится:

if(//$object2 has no longer any other objects referring to it){ 
$object2->delete(); 
//do something here 
} 

Я знаю, что это можно сделать, убедившись, что $ object1 удаляется первым. Но независимо от того, удален ли объект1 или нет, существует ли функция, которая выполняет эту проверку? Любая идея или часть кода были бы полезны!

ответ

2

Это действительно проблема с базой данных. Вы в основном должны сделать запрос для каждой таблицы внешнего ключа, который относится к таблице, которую вы пытаетесь удалить

Но есть целый ряд решений, в зависимости от ваших требований

Но самый простой способ, чтобы поймать базу данных исключение, которое бросается при попытке удалить

Например

try 
{ 
    $object2->delete(); 
} 
catch(CDbException $ex) 
{ 
    //unable to delete code here 
} 

Это очень простой, хотя, поскольку вы не знаете, какие таблицы вызывают нарушение внешнего ключа.

В противном случае вам нужно написать код для проверки каждого внешнего ключа (это может быть в состоянии сделать с помощью мета-данных базы данных, Yii есть)

+0

Спасибо, сэр! Я действительно думал о проверке внешнего ключа внешнего сопоставленного объекта1, если они все еще относятся к объекту2, .. рад, что это было проще! – muffin

Смежные вопросы