Как удалить записи из связаных таблиц

Есть таблица с именами и с ней связана таблица контактов и таблица сообщений. Мне нужно удалить какого нибудь пользователя естественно со всеми записями из других таблиц. Как можно это осуществить.

Если таблицы типа InnoDB, и между ними прописаны необходимые связи, то удаление производится автоматически самой СУБД.

В ином случае нужно поместить удаление связанных записей в метод afterDelete вашей модели:




protected function afterDelete()

{

    Message::model()->deleteAll("`user_id` = {$this->id}");

    parent::afterDelete();

}



Даже если там отношение HAS_MANY?

Попробовал - не удаляет. :(

andy_s говорит про on delete cascade на ваших связях

Я новичек…

и не знаю как уии удалает

но предположу, что может у вас ваш Ид уже ноль после удаления?

  1. CActiveRecord по-умолчанию никакие изменения в зависимые записи не вносит, желаете вносить - вносите сами (если, опять же) сможете, например:



	/**

	 * @param boolean $runValidation

	 * @param array $attributes

	 */

	public function save($runValidation=true,$attributes=null){

		if(false!==($result=parent::save($runValidation,$attributes))){

			foreach(array_keys($this->getMetaData()->relations) as $name){

				if($this->hasRelated($name) && is_object($relation=$this->$name)){

					/* @var $relation CActiveRecord */

					$result&=$relation->save($runValidation,$attributes);

					$this->addErrors($relation->getErrors());

				}

			}

		}

		return !$this->hasErrors();

	}



  1. если вы желаете что-то делать с зависимыми записями - делайте это ручками, либо используйте поведения (behaviors), в экстэншнах можно найти несколько примеров.

  2. если вы новичек :rolleyes: , предлагаю сначала понять первые два шага, потом советовать (после удаления primaryKey не обнуляется) ;)

ясн, пасиб) буду знать…