|  | 
	                
  
    | 
	 
        รบกวนช่วยแก้ปัญหาดึงข้อมูลออกจากฐานข้อมูลออกมาแสดงด้วย php ไม่ได้     |  
    |  |  
 
	
		|  |  |  |  |  
		|  |  | 
          
            |  
 คือผมได้ตัวแบบ Web app มาตัวนึง แล้วนำมาดัดแปลงเพื่อใช้งาน แต่มีปัญหาตรงที่ว่า จากรูปดังกล่าวผมจะเพิ่มใน query เพื่อดึงข้อมูลจากตาราง edms_dms โดยเอาเฉพาะในคอลัมน์ detail ออกมาแสดง แต่ทำยังไงก็ไม่ได้ แล้วผมก็มือใหม่ซะด้วย ไม่รู้ว่าต้องเพิ่มเติมตรงไหนอีก ซึ่งผู้เขียนก็แค่บอกว่าเพิ่มตรงบรรทัดที่ 72 : return static::createQuery() เอง ซึ่งผมก็ลองหลายอย่างแล้วมันก็ไม่ออก จนปัญญาจริงๆ จึงขอรบกวนผู้รู้ช่วยแนะนำด้วยครับ ด้านล่างนี้เป็นไฟล์ php ที่เป็นต้นฉบับ พอรันออกมาก็จะปรากฏตามรูปล่างสุด แต่ผมอยากเพิ่มคอลัมน์ detail ขึ้นมาอีก ต้องทำอย่างไรครับ
 
 Code (PHP)
 
 <?php
/**
 * @filesource modules/dms/models/index.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */
namespace Dms\Index;
use Gcms\Login;
use Kotchasan\Database\Sql;
use Kotchasan\Http\Request;
use Kotchasan\Language;
/**
 * module=dms
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class Model extends \Kotchasan\Model
{
    /**
     * Query ข้อมูลสำหรับส่งให้กับ DataTable
     *
     * @param array $params
     * @param array $login
     *
     * @return \Kotchasan\Database\QueryBuilder
     */
    public static function toDataTable($params, $login)
    {
        $where = array();
        if (!empty($params['from'])) {
            $where[] = array('A.create_date', '>=', $params['from']);
        }
        if (!empty($params['to'])) {
            $where[] = array('A.create_date', '<=', $params['to']);
        }
        $select = array('A.id', 'A.create_date', 'A.document_no', 'A.topic');
        $query = static::createQuery()
            ->from('dms A');
        $n = 1;
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            $query->join('dms_meta N'.$n, 'LEFT', array(array('N'.$n.'.dms_id', 'A.id'), array('N'.$n.'.type', $k)))
                ->join('category C'.$n, 'LEFT', array(array('C'.$n.'.category_id', 'N'.$n.'.value'), array('C'.$n.'.type', $k)));
            if ($k == 'department') {
                $select[] = Sql::GROUP_CONCAT('C'.$n.'.topic', $k);
                if (!empty($login['department'])) {
                    $where[] = array('N'.$n.'.value', $login['department']);
                }
            } else {
                $select[] = 'C'.$n.'.topic '.$k;
            }
            if ($params[$k] > 0) {
                $where[] = array('N'.$n.'.value', $params[$k]);
            }
            $n++;
        }
        $select[] = 'A.url';
        $q1 = $query->select($select)
            ->where($where)
            ->groupBy('A.id');
        $where = array();
        if (!empty($params['search'])) {
            $where[] = Sql::create("(A.`detail` LIKE '%$params[search]%' OR A.`document_no` LIKE '%$params[search]%' OR A.`topic` LIKE '%$params[search]%' OR F.`topic` LIKE '%$params[search]%')");
        }
        return static::createQuery()
            ->select(Sql::IFNULL('F.id', 0, 'id'), 'F.size', 'A.id dms_id', 'A.create_date', 'A.document_no', 'A.topic', 'F.topic file_name', 'F.ext', 'A.department', 'A.cabinet', 'W.downloads', 'A.url')
            ->from(array($q1, 'A'))
            ->join('dms_files F', 'LEFT', array('F.dms_id', 'A.id'))
            ->join('dms_download W', 'LEFT', array(array('W.file_id', Sql::create('CASE WHEN A.`url`="" THEN F.`id` ELSE 0 END')), array('W.dms_id', 'A.id'), array('W.member_id', $login['id'])))
            ->where($where);
    }
    /**
     * รับค่าจาก action
     *
     * @param Request $request
     */
    public function action(Request $request)
    {
        $ret = array();
        // session, referer, member, สามารถดูหรือดาวน์โหลดเอกสารได้
        if ($request->initSession() && $request->isReferer() && $login = Login::isMember()) {
            if (Login::checkPermission($login, 'can_download_dms')) {
                // ค่าที่ส่งมา
                $file_id = $request->post('id')->toInt();
                if (preg_match('/(detail|download)_([0-9]+)/', $request->post('action')->toString(), $match)) {
                    if ($match[1] == 'detail') {
                        $document = \Dms\View\Model::get($match[2]);
                        if ($document) {
                            $ret['modal'] = Language::trans(createClass('Dms\View\View')->render($document, $login));
                        }
                    } elseif ($match[1] == 'download') {
                        if ($file_id > 0) {
                            // ดาวน์โหลดไฟล์
                            $ret = $this->fileDownload($file_id, $login['id']);
                        } else {
                            // เปิด URL
                            $ret = $this->openUrl($match[2], $login['id']);
                        }
                    }
                }
            }
        }
        // คืนค่าเป็น JSON
        echo json_encode($ret);
    }
    /**
     * เปิด URL
     *
     * @param int $id
     * @param int $member_id
     *
     * @return array
     */
    public function openUrl($id, $member_id)
    {
        $download = $this->db()->createQuery()
            ->from('dms_download')
            ->where(array(
                array('dms_id', $id),
                array('file_id', 0),
                array('member_id', $member_id),
            ))
            ->first('id', 'downloads');
        $save = array(
            'downloads' => $download ? $download->downloads + 1 : 1,
            'dms_id' => $id,
            'file_id' => 0,
            'member_id' => $member_id,
            'last_update' => date('Y-m-d H:i:s'),
        );
        if ($download) {
            $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
        } else {
            $this->db()->insert($this->getTableName('dms_download'), $save);
        }
        return array();
    }
    /**
     * ดาวน์โหลดไฟล์
     *
     * @param int $file_id
     * @param int $member_id
     *
     * @return array
     */
    public function fileDownload($file_id, $member_id)
    {
        $ret = array();
        // อ่านรายการที่เลือก
        $result = $this->db()->createQuery()
            ->from('dms_files')
            ->where(array('id', $file_id))
            ->first('id', 'dms_id', 'size', 'name', 'file', 'ext');
        if ($result) {
            // ไฟล์
            $file = ROOT_PATH.DATA_FOLDER.$result->file;
            if (is_file($file)) {
                // สามารถดาวน์โหลดได้
                $download = $this->db()->createQuery()
                    ->from('dms_download')
                    ->where(array(
                        array('file_id', $result->id),
                        array('member_id', $member_id),
                    ))
                    ->first('id', 'downloads');
                $save = array(
                    'downloads' => $download ? $download->downloads + 1 : 1,
                    'dms_id' => $result->dms_id,
                    'file_id' => $result->id,
                    'member_id' => $member_id,
                    'last_update' => date('Y-m-d H:i:s'),
                );
                if ($download) {
                    $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
                } else {
                    $this->db()->insert($this->getTableName('dms_download'), $save);
                }
                // id สำหรบไฟล์ดาวน์โหลด
                $id = uniqid();
                // บันทึกรายละเอียดการดาวน์โหลดลง SESSION
                $file = array(
                    'file' => $file,
                    'size' => $result->size,
                );
                if (self::$cfg->dms_download_action == 1 && in_array($result->ext, array('pdf', 'jpg', 'jpeg', 'png', 'gif'))) {
                    $file['name'] = '';
                    $file['mime'] = \Kotchasan\Mime::get($result->ext);
                } else {
                    $file['name'] = $result->name.'.'.$result->ext;
                    $file['mime'] = 'application/octet-stream';
                }
                $_SESSION[$id] = $file;
                // คืนค่า
                $ret['open'] = WEB_URL.'modules/dms/filedownload.php?id='.$id;
            } else {
                // ไม่พบไฟล์
                $ret['alert'] = Language::get('File not found');
            }
        }
        return $ret;
    }
}
 
  
 
 
 Tag : PHP, MySQL, HTML, XAMPP, Windows
 
 
 |  
            | 
 ประวัติการแก้ไข
 2021-05-03 17:09:35
 2021-05-03 17:12:27
 |  
            | 
              
                |  |  |  |  
                |  | 
                    
                      | Date :
                          2021-05-03 17:02:40 | By :
                          npolkhet | View :
                          2541 | Reply :
                          11 |  |  |  
                |  |  |  |  |  
            |  |  
		            |  |  
		|  |  |  |  |  
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | Code (PHP) 
 ->select(Sql::IFNULL('F.id', 0, 'id'), 'F.size', 'A.id dms_id', 'A.create_date', 'A.document_no', 'A.topic', 'F.detail', 'F.topic file_name', 'F.ext', 'A.department', 'A.cabinet', 'W.downloads', 'A.url')
 ผมไม่รู้นะว่าใช่มั้ย เพราะดูแล้วก็ไม่เข้าใจว่าไป select ตารางนั้นตรงไหน ไม่เห็น edms_dms สักแห่งหนึ่ง
 เข้าใจว่าคนเขียนใช้ framework คุณควรศึกษาจากเอกสาร framework ของเขา(ถ้ามี)
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2021-05-03 21:42:59 | By :
                            mr.v |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | MVC ต้องแก้อย่างน้อยสองที่คือ model ตาม #1 และ view ส่วน controller อาจมีเข้ามาเกี่ยวข้องหรือไม่ก็ได้ แล้วแต่คนเขียน 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2021-05-03 21:52:31 | By :
                            พญามัจจุราช |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
 
 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | มันดูเหมือนไม่มีทางเลือกนอกจากต้องศึกษาคู่มือของเขาครับ เพราะ framework แต่ละตัวมันไม่เหมือนกัน ถ้าไม่เคยใช้ก็คงจะไม่สามารถรู้ครอบจักรวาลไปถึงที่เขาทำได้ ถ้าไม่อย่างนั้นก็อาจต้องหาโปรแกรมลักษณะนี้ที่เขาทำแจก แต่ไม่ใช่ framework ของเจ้านี้ อย่างเช่นถ้าเป็น Codeigniter, Laravel จะมีคนเคยใช้มากก็จะหาคนช่วยได้ง่าย
 
 
 แล้วก็ตรวจดูให้แน่ใจด้วยว่าคุณเปิดแสดง error เอาไว้ทั้งหมด เพราะส่วนใหญ่ชอบทำแบบผิดๆ ไปปิดมันในขั้นตอน development แล้วพอผิดพลาดก็ไม่รู้เรื่องอะไรเลย
 
 |  
              | 
 ประวัติการแก้ไข
 2021-05-04 18:39:48
 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2021-05-04 18:12:22 | By :
                            mr.v |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
 
 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | น่าจะเป็น บันทัด 44 $select=array( ...., 'A.detail');  เป็นการกำหนด field ที่จะนำมาใช้
 
 หรือบันทัดที่ 73 ตาม คห.1
 
 แบบไม่ชัวร์นะครับ ควรจะอ่าน คู่มือของเขา ตาม คห 5 นั้นแหล่ะครับ
 ส่วนจะให้ผมไปอ่านให้ คงไม่ไหวล่ะครับ
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2021-05-05 11:51:03 | By :
                            Chaidhanan |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ขอบคุณทุกความคิดเห็นครับ 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2021-05-06 21:16:54 | By :
                            npolkhet |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |