PHP CI MANIA การสร้าง Option List แบบ JOIN กับตารางอื่นๆ เพื่อดึงชื่อที่ต้องการมาแสดง

โดย SONGCHAI SAETERN
การ JOIN ตารางเพื่อดึงค่าตารางที่ 2 มาแสดง บางครั้งในตารางนั้น อาจจะเก็บไอดีอีกที ซึ่งจะต้องดึงจาก ตารางที่ 3 มาแสดงด้วย

$this->data['tb_members_member_id_option_list'] = $this->Resume->returnOptionList("tb_members", "userid", "CONCAT_WS(' - ',prefix,firstname,lastname)");

โค้ดด้านบนนี้จะได้แค่เพียงข้อมูลจากตารางที่ 2 ซึ่งคำนำหน้ายังเป็นเพียงไอดี จะต้องเขียน JOIN เพื่อดึงชื่อจากตารางที่ 3 มาแสดงด้วย


เปิดไปที่ไฟล์ View เพื่อดูว่าใช้ตัวแปรอะไรรับค่า
ในที่นี้คือ tb_members_member_id_option_list


เปิดไฟล์ Controller เพื่อค้นหาว่ามีการสร้างตัวแปรนี้ในตำแหน่งไหนบ้าง (ซึ่งปกติแล้วจะมีหลายตำแหน่ง ต้องแก้ให้ครบทุกจุด)

ในตัวอย่างนี้จุดแรกเลยที่เจอคือฟังก์ชั่น add()

ให้ทำการสร้างโค้ดชุดใหม่เพื่อใช้แทนโค้ดชุดเดิม โดยจะส่ง options เพื่อเข้าไปสร้างคำสั่ง JOIN ไว้ด้วย



$options = array(
'join' => "LEFT JOIN tb_members_prefix ON tb_members.prefix = tb_members_prefix.id"
);
$option_list = $this->Resume->returnOptionList("tb_members", "userid", "CONCAT(prefix_name,firstname,' ',lastname)", $options);
$this->data['tb_members_member_id_option_list'] = $option_list;


แต่ในเวอร์ชั่นปัจจุบัน 0.8.4 จะยังไม่มีคำสั่ง JOIN 
ดังนั้นต้องเข้าไปแก้ไขที่ application/core/MY_Mode.php 

โดยค้นหาคำว่า createOptionList

เพิ่มชุดคำสั่ง

$join = '';
if(isset($condition['join'])){
$join = $condition['join'];
}
และแก้ไขตัวแปร $sql

$sql = "SELECT $field_value, $field_text $field_attributes FROM $table $join $where $order_by";

จะได้ดังภาพ


โดยโค้ดที่แก้ไขแล้วของฟังก์ชั่น createOptionList() จะเป็นดังนี้


public function createOptionList($table, $field_value, $field_text, $condition = array())
{
$where = '';
if(isset($condition['where'])){
$where = "WHERE ". $condition['where'];
}
$join = '';
if(isset($condition['join'])){
$join = $condition['join'];
}
if(isset($condition['order_by'])){
$order_by = $condition['order_by'];
}else{
$order_by = $field_text;
}

$ret = false;
if(isset($condition['return'])){
$ret = $condition['return'];
}

$select_value = '';
if(isset($condition['active'])){
$select_value = $condition['active'];
}
$field_attributes = '';
if(isset($condition['attributes'])){
foreach($condition['attributes'] as $field){
if($field != $field_value && $field != $field_text){
$field_attributes .= ', '.$field;
}
}
}

$list = '';
$order_by = 'ORDER BY '. $order_by;
$sql = "SELECT $field_value, $field_text $field_attributes FROM $table $join $where $order_by";
$qry = $this->db->query($sql);
foreach ($qry->result_array() as $row) {
$selected = '';
if($select_value == $row[$field_value]){
$selected = 'selected="selected"';
}
$attributes = '';
if(isset($condition['attributes'])){
foreach($condition['attributes'] as $field){
$attributes .= ' data-'. $field . '="'.$row[$field].'"' ;
}
}
if( strpos($field_text, '(') === false ) {//no function
if( strpos($field_text, ',') !== false ) {
$i = 0;
$separator = '';
$text_title = '';
if(isset($condition['field_text_separator'])){
$field_text_separator = $condition['field_text_separator'];
}else{
$field_text_separator = ' ';
}
$arr = explode(',', $field_text);
foreach($arr as $val){
$text_title .= $separator . $row[trim($val)];
if(is_array($field_text_separator)){
$separator = $field_text_separator[$i];
}else{
$separator = $field_text_separator;
}
}
}else{
$text_title = $row[$field_text];
}
}else{
$text_title = $row[$field_text];
}
$option = '<option '.$attributes.' value="'. $row[$field_value] . '" '.$selected.'>' . $text_title . '</option>';
if($ret == true){
$list .= $option;
}else{
echo $option;
}
}

if($ret == true){
return $list;
}
}

ผลลัพธ์ก็จะได้ชื่อคำนำหน้ามาแสดงจากตารางที่ 3 








PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้ม  
http://www.phpcodemania.com