รบกวนช่วยแก้ปัญหาดึงข้อมูลออกจากฐานข้อมูลออกมาแสดงด้วย 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 :
2133
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
Load balance : Server 01