如何使用 join codeigniter 4 sql 服务器向两个表插入一个值

how to insert a value to both tables using join codeigniter 4 sql server

我正在尝试同时向两个 table 插入值。我在我的应用程序中使用了一个表单,我使用表单中插入的值将它们插入到数据库中。但现在我要将值插入一个 table(用户)。

public function registerUser($formdata){

    helper('global');// a heper for randomString().
    //Asign value to columns
    $db_data['Emailaddress'] = $formdata['emailaddress'];
    $db_data['Password'] = password_hash($formdata['password'], PASSWORD_DEFAULT);
    $db_data['Status'] = 'Free';
    $db_data['Token'] = randomString(32);
    $db_data['FirstLogin'] = 0;
    $db_data['Users.UsersKey'] = $db_data['UsersSettings.UsersKey'];
    //insert to db
    $this->db->table('Users', 'UsersSettings')->join('UsersSettings','Users.UsersKey = UsersSettings.UsersKey', 'inner')->insert($db_data);       
} 
public function updateUserSetting_proccess(){
    $formdata = $this->request->getPostGet();
    return $this->SettingsModel->update_user_settings($formdata);
}

用户table的内容是:

    SELECT TOP (1000) [UsersKey]
      ,[UniqueID]
      ,[Token]
      ,[ResetToken]
      ,[Emailaddress]
      ,[Password]
      ,[Status]
      ,[DateTimeAdded]
      ,[DateTimeLastUpdated]
      ,[FirstLogin]
    FROM [dbo].[Users]

由于自动递增,UsersKey 自动插入。 我要使用的第二个 table 是 UsersSettings,内容为:

 SELECT TOP (1000) [UsersSettingsKey]
      ,[UsersKey]
      ,[FirstName]
      ,[LastName]
      ,[Logo]
      ,[Organization]
      ,[Address]
      ,[Number]
      ,[Addition]
      ,[Postcode]
      ,[City]
      ,[Country]
      ,[Language]
      ,[Theme]
      ,[CalcPercentage]
      ,[CalcAdminFee]
      ,[ColorPrimary]
      ,[ColorSecondary]
      ,[DateTimeLastUpdated]
  FROM [dbo].[UsersSettings]

我希望 UsersSettings 中的 UsersKey 在 Users UsersKey 中具有相同的值。 我试过这个:

join('UsersSettings','Users.UsersKey = UsersSettings.UsersKey', 'inner')

但没有用。有人可以给我一些建议吗?

您需要先执行插入 table Users 才能获得生成的 UsersKey.

为什么需要先插入 table 用户的解释,可以用 SQL 等效项显示:

declare @lv_UsersKey int

-- insert into table Users (only essential parts shown)
insert into Users(....) values (...)

-- capture UsersKey for inserted record
select @lv_UsersKey = cast(SCOPE_IDENTITY() as int)

-- then insert into UsersSettings (only essential parts shown)
insert into UsersSettings (UsersKey, ....) values (@lv_UsersKey, ...)

将上述 SQL 传输到 codeigniter 将如下所示:

$this->db->table('Users')->insert($db_data);
$inserted_users_key = $this->db->insert_id();

$db_data2['UsersKey'] = $inserted_users_key;
// some more init of $db_data2 here

$this->db->table('UsersSettings')->insert($db_data2);