การ 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;
ดังนั้นต้องเข้าไปแก้ไขที่ application/core/MY_Mode.php
โดยค้นหาคำว่า createOptionList
จะได้ดังภาพ
โดยโค้ดที่แก้ไขแล้วของฟังก์ชั่น createOptionList() จะเป็นดังนี้
ผลลัพธ์ก็จะได้ชื่อคำนำหน้ามาแสดงจากตารางที่ 3
เพิ่มชุดคำสั่ง
$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 functionif( 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
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น