Косяк в комментариях (РЕШЕНО)

Приветствую, сегодня с утрица возникала вот такая ошибка!

Был топик, там были комменты, автор, как я понял удалил топик, но комменты почему в прямом эфире остались и выводят ошибку
Fatal error: Call to a member function getBlog() on a non-object in /home/*******.ru/www/templates/compiled/******/e59c47ebebf6f89c0cfae1d07e9c26bb1f639c1d.file.comment_list.tpl.php on line 31

Попробовал продублировать ошибку на тестовом сайта, не удалось.

В чем может быть беда? То есть часть прямого эфира выводится норм, но как доходит до этого то все ошибка.

Такая же ситуация в профиле пользователя в созданных комментариях.

UPD нашел в логах такую ошибку
[2013-01-27 15:36:10][4709][1437][ERROR][SQL Error: Deadlock found when trying to get lock; try restarting transaction at /home/******.ru/www/classes/modules/user/mapper/User.mapper.class.php line 131
Array
(
    [code] => 1213
    [message] => Deadlock found when trying to get lock; try restarting transaction
    [query] => REPLACE INTO mr_session
			SET
				session_key = '*************************' ,
				user_id = '1800' ,
				session_ip_create = '127.0.0.1' ,
				session_ip_last = '127.0.0.1' ,
				session_date_create = '2013-01-27 15:36:10' ,
				session_date_last = '2013-01-27 15:36:10'
		
    [context] => /home/******.ru/www/classes/modules/user/mapper/User.mapper.class.php line 131
)
]
[2013-02-23 19:18:05][2911][8097][ERROR][SQL Error: Cannot delete or update a parent row: a foreign key constraint fails (`****`.`mr_comment`, CONSTRAINT `mr_topic_comment_fk` FOREIGN KEY (`comment_pid`) REFERENCES `mr_comment` (`comment_id`) ON DELETE CASCADE ON UPDATE CASCADE) at /home/*******.ru/www/classes/modules/comment/mapper/Comment.mapper.class.php line 525
Array
(
    [code] => 1451
    [message] => Cannot delete or update a parent row: a foreign key constraint fails (`******`.`mr_comment`, CONSTRAINT `mr_topic_comment_fk` FOREIGN KEY (`comment_pid`) REFERENCES `mr_comment` (`comment_id`) ON DELETE CASCADE ON UPDATE CASCADE)
    [query] => 
			DELETE FROM mr_comment 
			WHERE
				target_id IN ('2624')
				AND
				target_type = 'topic'
		
    [context] => /home/*****.ru/www/classes/modules/comment/mapper/Comment.mapper.class.php line 525
)
]


UPD2 aVadim, пытался помочь через БД но так и не нашли, вобщем сделали проверку на наличие топика и юзера в шаблоне.
Красивый номер сотового телефона, купленный на сайте http://www.westek.ru, повышает узнаваемость бренда в рекламе. И влечет за собой постоянное увеличение количества клиентов.

12 комментариев

avatar
livestreet.ru/blog/13364.html — не поможет?
avatar
Это баг в движке, о котором Максу давным-давно известно. Сообщения об этом баге он по неясным причинам игнорирует.

Восстановить нормальную работу можно, удалив из таблицы comments_online комментарий к несуществующему уже топику. Разумеется, это должно происходить автоматом без участия человека, но автор движка, видимо, иного мнения.
avatar
херасе. сам пока не сталкивался, но с удаленными комментами встречаться уже пришлось. и что, макс вообще наплевал на сие?
avatar
Подскажите. Как была сделана проверка в шаблоне?
avatar
Как и написали сделали в шаблоне проверку на наличия топика

что то типа if $oTopic, так же советую сделать проверку на наличие блога
avatar
Спасибо. Пробовал

{if $oTopic->getId()}

{if $oBlog->getId()}

{if $oTopic}

Или так

{if $oComment->getTarget()}

{if $oTopic->getBlog()}


Не лечится. В var_dump объекты попадают, нужное выводится. Но ошибка не лечится условием. Пробовал найти не существующий коммент в БД, но результат = 0. Очаялся :(

P.S. У меня это в поиске по комментам, но думаю суть не важно, ошибка из-за одного и того же получатся, если бы не поиск даже не увидал бы.
avatar
у вас там foreach по комментам?

можно ваш кусок кода по выводу комментов этих или какой шаблон, там может другое проканает.
avatar
Да, foreach. Вот целиком yadi.sk/d/2OR4ZeFknEq3k
avatar
может

{if $oTopic->getUrl()}

только надо попробоватьв разные места это вставлять

я бы попробовал перед переменными
{assign var=«oBlog» value=$oTopic->getBlog()}
{assign var=«oShop» value=$oTopic->getShop()}

например где только идет вызов oTopic
avatar
getUrl


Найти не смог. Но сработало:

{if $oComment->getTarget()}


Хотя раньше уже пробовал. Спасибо за помощь!
avatar
видимо надо было раньше условие вставить :)
avatar
Да, так и есть, т.к. объявляется

{assign var="oBlog" value=$oTopic->getBlog()}


Которого нет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.