Удалить из двух таблиц mysql одновременно, используя codeigniter соединения - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь удалить из двух таблиц mysql, используя эту функцию.

public function deleteBusiness($id)
        {
            $this->db->from("business");
            $this->db->join("opening_hours", "business");
            $this->db->where("business", $id);
            return $this->db->delete(array("business","opening_hours"));
        }

Похоже, что он работает правильно, так как правильные данные удаляются из обеих таблиц, но когда я вызываю их со следующим ...

if($this->businesses_model->deleteBusiness($id)){
                    $this->session->set_flashdata('flash_message', 'Business Deleted');
                } else {
                    $this->session->set_flashdata('flash_message', 'There was a problem deleting that business');
                }

ошибкасообщение отображается.

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Похоже, вы пытаетесь удалить строку из таблицы business и все строки в opening_hours, относящиеся к этому бизнесу.

К сожалению, ваш код не будет работать, так как CodeIgniter игнорирует объединенияпри удалении Active Record.

В их документации сказано, что вы можете передать массив для удаления метода, и он удалит из нескольких строк

$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);

Однако, обратите внимание, что он удалит строкииз 3 таблиц, где id = 5. Точно так же, как в вашем случае, он будет удалять из business и creation_hours, где id имеет значение 2. Очевидно, это не то, что вам нужно.

Единственный вариант - использовать либо 2 запросакак ниже или используйте запрос Raw SQL.

            $this->db->from("business");
            $this->db->where("id", $id);
            $this->db->delete('business');

            $this->db->from("opening_hours");
            $this->db->where("business_id", $id);                       
            $this->db->delete('opening_hours');
0 голосов
/ 05 октября 2019

Заменить вышеуказанный код следующим кодом, дайте мне знать, если он не работает

public function deleteBusiness($id)
 {
            $this->db->from("business");
            $this->db->join("opening_hours", "business");
            $this->db->where("business", $id);
            $this->db->delete(array("business","opening_hours"));
            return $this->db->affected_rows();
 }


if($this->businesses_model->deleteBusiness($id) > 0){
        $this->session->set_flashdata('flash_message', 'Business Deleted');
   } else {
        $this->session->set_flashdata('flash_message', 'There was a problem deleting that business');
   }

, дайте мне знать, если он не работает

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