1

次の挿入クエリがあります。

$salarystuff = array('salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);

        $this->db->insert('salaries', $salarystuff);

給与表には次の列があります: emp_no| 給与| from_date| to_date (dev.mysql.com から入手できるデータベースを使用しています。

しかし、外部キー制約を示すエラー 1452 が表示されます。このテーブルに挿入できるようにするには、他のテーブルのキー値を参照するにはどうすればよいですか?

これはエラーメッセージです:

子行を追加または更新できません: 外部キー制約が失敗しました ( employees. salaries, CONSTRAINT salaries_ibfk_1FOREIGN KEY ( emp_no) REFERENCES employees( emp_no) ON DELETE CASCADE)

INTO salaries( salary, from_date, to_date) 値 ('1000000', '2012-12-27', '2013-01-16')

ありがとうございました

編集:私は次のことを試しています

まず、この関数を使用して employees テーブルにレコードを作成します。

function add_emp($firstname,$lastname,$gender,$date_of_birth,$jobtitle,$dept,$hiredate)
    {

        $data = array(  'first_name' => $firstname, 
                        'last_name' => $lastname,
                        'gender' => $gender,
                        'birth_date' => $date_of_birth,
                        'hire_date' => $hiredate);

        $this->db->trans_start();
        $this->db->insert('employees', $data);
        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
        {
            $msg = "Adding the new employee failed.";
            return $msg;
        }
        else
        {
            $msg = "Successfully Added Employee.";
            return $msg;
        }
    }

次に、別の関数で給与を追加します。

function add_salary($firstname,$lastname,$gender,$date_of_birth,$jobtitle,$dept,$hiredate,$salary, $salary_from_date,$salary_to_date)
    {
        $this->db->select('emp_no');
        $this->db->from('employees');
        $this->db->where('first_name', $firstname);
        $this->db->where('last_name', $lastname);
        $this->db->where('gender', $gender);
        $this->db->where('hire_date', $hiredate);
        $this->db->where('birth_date', $date_of_birth);
        $this->db->limit(1);
        $selected_employee = $this->db->get();

        $salarystuff = array('emp_no' => $selected_employee, 'salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);
        $this->db->insert('salaries', $salarystuff);
    }

どちらもモデルに含まれています。次に、コントローラーで両方の関数を呼び出します。

$employee_insert = $this->user->add_emp($firstname,$lastname,$gender,$date_of_birth,

$jobtitle,$dept, $hiredate);

        $salarythings = $this->user->add_salary($firstname,$lastname,$gender,$date_of_birth,$jobtitle,$dept,$hiredate,$salary, $salary_from_date,$salary_to_date);

しかし、 emp_no フィールドに値がないため、エラーが発生します...次の行である可能性があります。

$selected_employee = $this->db->get();

            $salarystuff = array('emp_no' => $selected_employee,

私のエラーメッセージは次のとおりです。

クラス CI_DB_mysql_result のオブジェクトを文字列に変換できませんでした

4

1 に答える 1

1

問題は、給与テーブルに挿入しようとしているが、給与レコードの対象となる従業員を指定していないことです。emp_noテーブル内の列に値を指定する必要がありemployeesます。

到着予定時刻:

add_empより多くのコードを投稿してよかったです-作成された従業員のIDを返すように関数を変更する必要があります(ここでemp_noは、データベースの自動インクリメント列であると想定しています)。そのようです:

function add_emp($firstname,$lastname,$gender,$date_of_birth,$jobtitle,$dept,$hiredate)
{

    $data = array(  'first_name' => $firstname, 
                    'last_name' => $lastname,
                    'gender' => $gender,
                    'birth_date' => $date_of_birth,
                    'hire_date' => $hiredate);

    $this->db->trans_start();
    $this->db->insert('employees', $data);
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE)
    {
        //$msg = "Adding the new employee failed.";
        //return $msg;
        return -1; // indicates failure
    }
    else
    {
        //$msg = "Successfully Added Employee.";
        //return $msg;
        return $this->db->insert_id();
    }
}

呼び出すコードはadd_emp、戻り値をメッセージではなく整数として表示するように少し変更する必要があることに注意してください。他のすべてのデータでは、次のようになります。

function add_salary($emp_no,$salary, $salary_from_date,$salary_to_date)
{
    $salarystuff = array('emp_no' => $emp_no, 'salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);
    $this->db->insert('salaries', $salarystuff);
}

したがって、従業員とその給与を追加するコードは次のようになります。

$emp_no = add_emp([Your parameters]);
if ( $emp_no > 0 ) {
   add_salary($emp_no, [other parameters]);
} else {
   // Show some error message that the employee creation failed.
}

もう一度編集:

上記の私のアドバイスを無視すると、エラーが発生する理由に対する簡単な答え$selected_employeeは、結果セットであり、実際の従業員番号ではないためです。そのコードを次のように変更する必要があります。

$selected_employee = $this->db->get();
$result = $selected_employee->result();
$emp_no = $result[0]->emp_no;

    $salarystuff = array('emp_no' => $emp_no, 'salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);
    $this->db->insert('salaries', $salarystuff);
于 2012-12-27T20:01:32.593 に答える