简体   繁体   中英

Codeigniter 4 Seeder gives an error, "Array to string conversion"

When I add dh_setting_context' => 'user1' I get an error of Array to string conversion , however, when I remove that line from the seeder, it works and the table is correctly populated. Why does dh_setting_context' => 'user1' generator an error and how to fix it, please?

Here is my seeder file

namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
use \CodeIgniter\I18n\Time;

class DhSettingSeeder extends Seeder
{

public function run()
{
    $data = [
        
        // app - General App Settings
        [
            'dh_setting_key'            => 'app.dh_company_name' ,
            'dh_setting_value'          => 'ABC Big Co., Ltd',
            'dh_setting_created_at'     => Time::now(),
            'dh_setting_updated_at'     => Time::now()
        ],
        
        [
            'dh_setting_key'            => 'app.dh_company_address_line_1' ,
            'dh_setting_value'          => '123 Long Street',
            'dh_setting_created_at'     => Time::now(),
            'dh_setting_updated_at'     => Time::now()
        ],
        
        
        // email - general settings for email
        [
            'dh_setting_key'            => 'email.fromEmail' ,
            'dh_setting_value'          => 'example@yahoo.com',
            'dh_setting_created_at'     => Time::now(),
            'dh_setting_updated_at'     => Time::now()
        ],
        [
            'dh_setting_key'            => 'email.SMTPHost' ,
            'dh_setting_value'          => 'smtp.mail.yahoo.com',
            'dh_setting_created_at'     => Time::now(),
            'dh_setting_updated_at'     => Time::now()
        ],
        // add some user settings for admin user (user id = 1)
        [
            'dh_setting_key'            => 'user.timezone' ,
            'dh_setting_value'          => 'gmt',
            'dh_setting_context'        => 'user1',
            'dh_setting_created_at'     => Time::now(),
            'dh_setting_updated_at'     => Time::now()
        ]
    ];
    $this->db->table('dh_setting')->insertBatch($data);
}
}

Here is the structure of my table

结构 dh_setting 表

Not all of the entries in $data have the same keys.

CodeIgniter takes the keys from the first entry ( 'dh_setting_key' , 'dh_setting_value' , 'dh_setting_created_at' , 'dh_setting_updated_at' ) and uses these keys to check all of the entries in $data .

If the keys of an entry are the same, it creates a string with the entry's values.

If the keys of an entry are different, it creates an empty array.

For the INSERT query, CodeIgniter then tries to concatenate the value strings with the empty array, which is not allowed and gives the error.

To fix, add 'dh_setting_context' => null, to the other entries.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM