Не удалось преобразовать объект класса stdClass в строку (номер ошибки: 1064)

#codeigniter #codeigniter-3

#codeigniter #codeigniter-3

Вопрос:

Я продолжаю получать эту ошибку (проверьте внизу вопроса точную ошибку) Я проверял снова и снова, но не мог найти, что не так. Кажется, все в порядке. При insert_batch он работает нормально, но при update_batch я получаю эту ошибку. Вот мой текущий код

Модель Codeigniter: Вот модель, которая правильно извлекает данные

     function get_seeds($tournament_id) {
        $this->db->where('tournament_id', $tournament_id);
        $result = $this->db->get('tournament_seed');
        return $result->result();
    }
  

Контроллер Codeigniter:
Вот мой контроллер, где я проверяю, есть ли и строка для начального числа. Если ДА, то обновите, иначе вставьте.

     $check_seeds = (object)$this->tournament_model->get_seeds($tournament_id);
    if ($_POST) {
        foreach ($check_seeds as $key => $value) {
            if(!empty($key) amp;amp; !empty($value)) {
                $seeded[] = array(
                    'id' => $value->id,
                    'tournament_id' => $tournament_id,
                    'stage_id' => $stage_id,
                    'seed_id' => $value,
                    'team_name' => $key,
                );
                $this->db->update_batch('tournament_seed', $seeded, 'id');
                redirect('organizer/tournaments);
            } else {
                //something
            }
        }
    }
  

Print_r($check_seeds)

     stdClass Object
    (
        [0] => stdClass Object
        (
            [id] => 3
            [tournament_id] => 713161746
            [stage_id] => 3
            [seed_id] => 1
            [team_name] => -V-ATTAX
        )

        [1] => stdClass Object
        (
            [id] => 4
            [tournament_id] => 713161746
            [stage_id] => 3
            [seed_id] => 2
            [team_name] => NIP
        )

        [2] => stdClass Object
        (
            [id] => 5
            [tournament_id] => 713161746
            [stage_id] => 3
            [seed_id] => 3
            [team_name] => fnatic
        )
    )
  

Ошибки

     A PHP Error was encountered
    Severity: 4096

    Message: Object of class stdClass could not be converted to string

    Filename: database/DB_query_builder.php

    Line Number: 1970

    Backtrace:

    File: E:xampphtdocshltvapplicationcontrollersorganizerTournaments.php
    Line: 1065
    Function: update_batch

    File: E:xampphtdocshltvindex.php
    Line: 315
    Function: require_once


    Error Number: 1064

    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ELSE `seed_id` END, `team_name` = CASE WHEN `id` = '4' THEN '1' ELSE `team_name' at line 7

    UPDATE `tournament_seed` SET `tournament_id` = CASE WHEN `id` = '4' THEN '713161746' ELSE `tournament_id` END, `stage_id` = CASE WHEN `id` = '4' THEN '3' ELSE `stage_id` END, `seed_id` = CASE WHEN `id` = '4' THEN ELSE `seed_id` END, `team_name` = CASE WHEN `id` = '4' THEN '1' ELSE `team_name` END WHERE `id` IN('4')

    Filename: E:/xampp/htdocs/hltv/system/database/DB_driver.php

    Line Number: 691
  

Ответ №1:

Вы пытаетесь использовать update_batch() для тех же данных, которые вы только что запросили из таблицы базы данных tournament_seed, но вы не используете новые данные $ _POST для обновления.

Вы также используете update_batch() внутри цикла, что неверно. Цикл предназначен только для создания массива, который вы хотите обновить, затем вне цикла вы update_batch()

используйте следующее для создания массива, который позже можно использовать для update_batch(), что-то вроде:

 $seeded=array();
$sd=array();        
foreach($_POST['your_newly_posted_seeds'] as $key=>$value){
    $sd['id']=$value->id;
    $sd['tournament_id']=$tournament_id;
    //...
    array_push($seeded, $sd);
}

$this->db->update_batch('tournament_seed', $seeded, 'id');
  

update_batch() из документации прокрутите вниз или выполните поиск: $this-> db-> update_batch(), поскольку в нем нет закладки.