@AlexAll

Как в yii2 построить запрос upsert с массивом?

Привет, есть массив $news_id с адишниками новостей
есть SQL запрос
Yii::$app->db->createCommand()
        ->upsert(
            'display',
            [
                'hash' => md5($news_id . strtotime($date)),
                'date' => strtotime($date),
                'sum' => 1,
                'news_id' => $news_id ,
            ], [
                'sum' => new \yii\db\Expression('sum + 1'),
            ]
        )
        ->execute();


Как сделать этот запрос, чтобы он добавлял или обновлял счетчик сразу у нескольких новостей, или это можно сделать только несколькими запросами, в зависимости от количества $news_id ?
Этот хэш из склейки id новости и даты, чтобы счетчик учитывать по дате
'hash' => md5($news_id . strtotime($date)),
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
@KingstonKMS
Вам надо сделать нечто подобное, сформировать sql запрос в нужном формате(обновил):
$m = new Migration();
        $start = "INSERT INTO `display` (`hash`, `date`,`sum`, `news_id`) ";
        $insert_data = [];
        // $news_id = [здесь ваши ид];
        // $date = ""; здесь дата

        foreach ($news_id  as $id)
        {
            $time = strtotime($date);
            $hash =  md5($id . $time);
            $insert_data[] = " ('$hash', $time, 1, $id)";
        }

        $m->execute("$start VALUES " . implode(", ",$insert_data) . " ON DUPLICATE KEY UPDATE `sum` = `sum` + 1;");
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maksim_fix
Junior PHP developer
Перебирайте массив с новостями, для каждой новости делаете свой запрос, зачем вам сразу все?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы