Проблема с получением lastInsertId в запросе на обновление - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над cms для свойств / объявлений в oop php для учебных целей. У меня есть три таблицы, которые связаны с сводной таблицей.

photos (name, extension, created_at, updated_at), 

property_photo (property_id, photo_id), 

properties (title, description, type_of_property, use_of_the_property, quadrature, location...) 

Когда я пытаюсь обновить свое свойство, добавив еще одну фотографию, в моей сводной таблице photo_id получает правильный идентификатор из таблицы фотографий, но мой property_id всегда получает 0. Теперь я знаю, что функция lastInsertId не работает с UPDATE только при INSERT, но я не знаю, как получить property_id по-другому. Любая помощь приветствуется. Вот моя функция в модели:

AdModel:

public function update_ad($data, $id)
{
    $this->db->query('UPDATE properties SET title=:title, description=:description, type_of_property=:type_of_property, use_of_the_property=:use_of_the_property, quadrature=:quadrature, location=:location, price=:price, sales_clerk_info=:sales_clerk_info, booked=:booked, type_of_market=:type_of_market, type_of_payment=:type_of_payment WHERE id=:id');
    $this->db->bind(':title', $data['title']);
    $this->db->bind(':description', $data['description']);
    $this->db->bind(':type_of_property', $data['type_of_property']);
    $this->db->bind(':use_of_the_property', $data['use_of_the_property']);
    $this->db->bind(':quadrature', $data['quadrature']);
    $this->db->bind(':location', $data['location']);
    $this->db->bind(':price', $data['price']);
    $this->db->bind(':sales_clerk_info', $data['sales_clerk_info']);
    $this->db->bind(':booked', $data['booked']);
    $this->db->bind(':type_of_market', $data['type_of_market']);
    $this->db->bind(':type_of_payment', $data['type_of_payment']);
    $this->db->bind(':id', $id);
    $this->db->execute();


    $property_last_id = $this->db->lastId();

    $dataimagecount = count($data['image']);

    for ($i=0; $i < $dataimagecount ; $i++) { 

    $extension[$i] = explode('.',$data['image'][$i]);

    $this->db->query('INSERT INTO photos (name, extension) VALUES (:name, :extension)');
    $this->db->bind(':name', $extension[$i]['0']);
    $this->db->bind(':extension', $extension[$i]['1']);
    $this->db->execute();

    $photo_last_id = $this->db->lastId();

    $this->db->query('INSERT INTO property_photo (property_id, photo_id) VALUES (:property_id, :photo_id)');
    $this->db->bind(':property_id', $property_last_id);
    $this->db->bind(':photo_id', $photo_last_id);
    $this->db->execute();
    }

    return true;
}

1 Ответ

2 голосов
/ 17 июня 2019

У вас уже есть идентификатор properties, вы используете его в команде UPDATE и передаете его этому методу в качестве параметра !!!

public function update_ad($data, $id)
{
    $this->db->query('UPDATE properties 
                        SET title=:title, description=:description, 
                            type_of_property=:type_of_property, 
                            use_of_the_property=:use_of_the_property, 
                            quadrature=:quadrature, 
                            location=:location, 
                            price=:price, 
                            sales_clerk_info=:sales_clerk_info, 
                            booked=:booked, 
                            type_of_market=:type_of_market, 
                            type_of_payment=:type_of_payment 
                    WHERE id=:id');

    $this->db->bind(':title', $data['title']);
    $this->db->bind(':description', $data['description']);
    $this->db->bind(':type_of_property', $data['type_of_property']);
    $this->db->bind(':use_of_the_property', $data['use_of_the_property']);
    $this->db->bind(':quadrature', $data['quadrature']);
    $this->db->bind(':location', $data['location']);
    $this->db->bind(':price', $data['price']);
    $this->db->bind(':sales_clerk_info', $data['sales_clerk_info']);
    $this->db->bind(':booked', $data['booked']);
    $this->db->bind(':type_of_market', $data['type_of_market']);
    $this->db->bind(':type_of_payment', $data['type_of_payment']);
    $this->db->bind(':id', $id);
    $this->db->execute();


    // --!! Changed code !!--    
    //$property_last_id = $this->db->lastId();


    $dataimagecount = count($data['image']);

    for ($i=0; $i < $dataimagecount ; $i++) { 

        $extension[$i] = explode('.',$data['image'][$i]);

        $this->db->query('INSERT INTO photos 
                                 (name, extension) 
                          VALUES (:name, :extension)');
        $this->db->bind(':name', $extension[$i]['0']);
        $this->db->bind(':extension', $extension[$i]['1']);
        $this->db->execute();

        $photo_last_id = $this->db->lastId();

        $this->db->query('INSERT INTO property_photo 
                                 (property_id, photo_id) 
                          VALUES (:property_id, :photo_id)');

        $this->db->bind(':property_id', $id);
    // changed code                     ^^^
        $this->db->bind(':photo_id', $photo_last_id);
        $this->db->execute();
    }

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...