да уже понял, спасибо....вот такой код получился, так нормально или можно лучше сделать?
public function beforeDelete()
{
if(parent::beforeDelete())
{
$topics = Forum::findAll(['forum_id' => $this->id]);
foreach ($topics as $topic)
{
Comments::deleteAll('post_id = :topic_id AND module = :module', [':topic_id' => $topic->id, ':module' => 'app\modules\forum\models\Forum']);
}
Forum::deleteAll('forum_id = :id', [':id' => $this->id]);
return true;
}
else
{
return false;
}
}
Вот так сделал
public function afterSave($insert, $changedAttributes)
{
$material = '\\'. $this->module;
if($insert != false)
{
$model = $material::findOne($this->post_id);
$model->updateCounters(['comments' => 1]);
}
return parent::afterSave($insert, $changedAttributes);
}
public function afterDelete()
{
Владимир Коровин:
CREATE TRIGGER `insert_comment` AFTER INSERT ON `comments` FOR EACH ROW
BEGIN
IF (NEW.module = 'app\modules\post\models\Post') THEN
UPDATE post SET comments = (SELECT COUNT(id) FROM comments WHERE post_id = NEW.post_id AND module = NEW.module) WHERE post_id = NEW.post_id;
END IF;
END;
не могу понять где ошибка #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
Максим Тимофеев: у меня так и сделано, вопрос не в этом. Я разве спрашивал какие таблицы создавать? Вопрос реализации, через события или как? где и как делать апдейт поля
а зачем так усложнять? у меня в таблице новостей есть поле col_comments я просто хочу в него записывать, просто думаю может правильнее через события это делать
А если делать не статику, пишу <?= $model->shortText($model->short) ?>
в модели public function getShortText($text) {
return $text;
} и выдает ошибку Calling unknown method: app\modules\post\models\Post::shortText()