0

4 つのテキスト フィールドを持つ html フォームを取得してデータベースを検索し、その中の関連データを探して表示する方法について誰かアドバイスをいただけますか?

基本的に、このフォームは完全に入力する必要はありません。ユーザーは 1 つまたは 2 つのフィールド (例: first_name と last_name) に入力するだけでよく、モデルはユーザーのエントリに関連する他の 2 つの欠落フィールドを検索することになっています。

検索操作を機能させるには、少なくとも 1 つのフィールドに入力する必要があります。このフィールドは、4 つのいずれかになります (ランダム)。フィールドの名前は次のとおりです。

名 姓 部署名

データベースには、必要な情報を含む 3 つのテーブルがあります。それらは次のとおりです。

departments(dept_no, dept_name) 従業員(emp_no, first_name, last_name) title(従業員番号, title)

それらのすべてが同じ主キーを共有しているわけではないため、データベースには「部門」テーブルを「従業員」テーブルにリンクする別のテーブルがあります。

(departments_employees) => dept_emp(emp_no, dept_no)

以下の私の model.php ファイルは、いくつかのデータを検索するためにこれらすべてのテーブルを使用しますが、これまでのところ、この関数は「firstname」エントリに一致するデータのみを検索し、残りの入力フィールドは無視されます。

<?php

class Emp_model extends CI_Model {

function find_dept()
{
    $this->db->select('employees.first_name, employees.last_name, departments.dept_name, titles.title');
    $this->db->where('last_name', $this->input->get('lastname'));
    $this->db->join('dept_emp', 'dept_emp.emp_no = employees.emp_no');
    $this->db->join('departments', 'departments.dept_no = dept_emp.dept_no');
    $this->db->join('titles', 'titles.emp_no = employees.emp_no');
    $query = $this->db->get('employees');

    if($query->num_rows > 0)
    {
        return $query->result();

    }

    else
    {
        redirect('find');

    }

}
}

?>

私のビューは結果をテーブルに表示するので、今のところすべてエラーなしで動作しています。何時間も研究した後、私はこれを行う方法を思いつくことができません。誰かが私に従うことができるアイデアや同様のチュートリアルを持っている場合は、私に知らせてください! とても感謝しています!ありがとう :)

私が自分自身を明確にしなかった場合、またはさらに情報が必要な場合は、お知らせください!

4

2 に答える 2

1

配列を CI アクティブ レコードに渡すことができます。すべての入力をチェックする場合は、取得する前にアクティブ レコードを呼び出す必要があります。

$inputs = $this->input->post(); // you get an Associative array of post data

extract($inputs); // will extract variables from Associative array.

$where = array();

if(strlen($first_name))
 { 
   $where['first_name'] = $first_name;
 }

   if(strlen($last_name))
 { 
   $where['last_name'] = $last_name;
 }

 if(strlen($dept))
 { 
   $where['dept'] = $dept;
 }

  if(strlen($title))
 { 
   $where['title'] = $title;
 }

 $this->db->where($where);
 $query = $this->db->get('employees');
于 2012-12-30T06:08:18.590 に答える
1

タスクの完了に非常に近づいているようですが、コードについていくつか言及する必要があります。モデルで直接使用するべきではありません$this->input->get('lastname')。コントローラーで情報を取得し、次のような方法でモデルに渡す必要があります。

function find_dept($firstName, $lastName, $dept, $title) {
   ...
}

これにより、情報が送信されるメソッドに依存することなく、モデル関数を再利用できます。

function find_dept($firstName = false, $lastName = false, $dept = false, $title = false) {
   $this->db->select('employees.first_name, employees.last_name, departments.dept_name, titles.title');

   $this->db->join('dept_emp', 'dept_emp.emp_no = employees.emp_no');
   $this->db->join('departments', 'departments.dept_no = dept_emp.dept_no');
   $this->db->join('titles', 'titles.emp_no = employees.emp_no');

   if($firstName && $firstName !== '')
   {
     $this->db->where('employees.first_name', $firstName);
   }

   if($lastName && $lastName !== '')
   {
     $this->db->where('employees.last_name', $lastName);
   }

   if($dept && $dept !== '')
   {
     $this->db->where('departments.dept_name', $dept);
   }

   if($title && $title !== '')
   {
     $this->db->where('titles. title', $title);
   }


   $query = $this->db->get('employees');
}

codeigniter について詳しく説明するために、設定されていない場合は false を返すif($dept && $dept !== '')ため、使用して$this->input->get('lastname')いますが、空の文字列と等しいかどうかを確認する必要がある場合があります。もっといい書き方があるかもしれません

$this->db->like検索を改善することもできます。http://ellislab.com/codeigniter/user-guide/database/active_record.htmlで確認してください。

于 2012-12-30T06:15:06.960 に答える