Search code examples
phpcodeigniter-4

How can fixup dbforge problem in codeigniter -4


When I am trying to insert new column using codeigniter version 4 with dbforge.

I got an error in Production mode:

Whoops!We seem to have hit a snag. Please try again later...

public function addLanguage()
{ 
    $language = preg_replace('/[^a-zA-Z0-9_]/', '', $this->request->getPost('language',FILTER_SANITIZE_STRING));

    $language = strtolower($language);

    if (!empty($language)) {

        if (!$this->db->fieldExists($language, "language")) {

            $this->dbforge->addColumn("language", [
                $language => [
                    'type' => 'TEXT'
                ]
            ]); 

            $this->session->setFlashdata('message', 'Language added successfully');

            return redirect()->route('backend/setting/language');
        } 

    } else {
        $this->session->setFlashdata('exception', display('please_try_again'));
    }
    return redirect()->route('backend/setting/language');
}

What am I doing wrong in this code? Any potential help would be greatly appreciated!

Development mode error image below:

enter image description here


Solution

  • You can use this code

    public function addLanguage()
        { 
            $dbforge = \Config\Database::forge();
          
            $language = preg_replace('/[^a-zA-Z0-9_]/', '', $this->request->getPost('language',FILTER_SANITIZE_STRING));
    
            $language = strtolower($language);
            if (!empty($language)) {
                if (!$this->db->fieldExists($language, "language")) {
      
                    
                    $dbforge->addColumn("language", [
                        $language => [
                            'type' => 'TEXT'
                        ]
                    ]); 
    
                    $this->session->setFlashdata('message', 'Language added successfully');
                    return redirect()->route('backend/setting/language');
                } 
            } else {
                $this->session->setFlashdata('exception', display('please_try_again'));
            }
            return redirect()->route('backend/setting/language');
        }