การเรียกใช้คำสั่งของ Query Builder (E-doc) ข้อมูลแมาแค่แถวเดียว

การเรียกใช้คำสั่งของ Query Builder (E-doc) ข้อมูลมาแค่แถวเดียว
ผมลองเรียกค่า ข้อมูลจากฟิว topic จากตาราง category โดยอ้างอิงข้อมูลที่มันตรงกับข้อมูลในฟิว category_id
ออกมาแค่ ข้อมูลแรก ครับ
-----------------------------------
สมมติ ตาราง category
category_id | topic
|74814 | นาย ก|
|74828 | นาย ข|
|74860 |นาย ค|
|74853 |นาย ง|
-------------------------------------
จากตัวแปร $name_departments ด้านล่าง ผมเรียกข้อมูลจากตาราง edocument จากฟิว department ครับ
ถ้าใช้ explode ข้อมูลมา เป็น --->>> นาย ก อันเดียว ครับ นาย ข ค ง ไม่ออก ครับ
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }

$ret = array();
// ข้อความ
$msg = array(

'{LNG_E-Document}',
'', // เว้นบรรทัด
// '{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง

'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$gNAME.',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง

'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
//'{LNG_ผู้ส่ง ----->>>>}: '.$edocument['topic'], // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)

'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบที่}',
'URL: '.WEB_URL.'index.php?module=edocument'
);
30 ต.ค. 2566 10 1,730

จริงๆ คำสั่งก็เขียนถูกแล้ว แนะนำให้ตรวจสอบ $name_departments ว่ามันเก็บแอเรย์ที่ถูกต้องหรือไม่ (มันต้องเป็น แอเรย์ มันถึงจะออกมาหลายรายการ)
ลองแทรก debug() ดู query ที่ได้ว่าถูกต้องหรือไม่
->from('category')
->debug()
ผลลัพท์อาจจะอยู่ใน console และอาจทำให้ script ไม่ตอบสนองชั่วคราวนะครับ ให้สังเกตุดูว่า query ที่ได้มันปกติหรือเปล่า

วิธีอื่นๆที่เป็นไปได้ ถ้าทำอย่างถูกต้อง สามารถเรียกใช้ class \Cdms\Category\Model ได้ข้อมูลจะอยู่ในนั้นอยู่แล้ว หรือใช้การ JOIN ข้อมูลออกมาตรงๆเลยก็ได้
#1

ลองแล้วครับ
จากคำสั่ง
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->debug()
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }
--------------------------------------------------------------
ผลออก ที่ console ออกมาเป็น ตามนี้ครับ
....public_html/modules/edocument/models/write.php on line 248
SELECT * FROM `devrdco1_edoc`.`edoc_category` WHERE `category_id` IN ('', '74814', '74828', '74860', '74853', '')
{"alert":"\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e1c\u0e39\u0e49\u0e17\u0e35\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\u0e41\u0e25\u0e49\u0e27","location":"index.php?module=edocument-sent&count=100&sort=last_update%20DESC&urgency=-1&sender=0"}

หมายเหตุ ลอง เปลี่ยน ตัวแปล ใน
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$name_departments[3].',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง

$name_departments[0] ผลเป็นว่าง
$name_departments[1] ผลเป็น 74814
$name_departments[2] ผลเป็น 74828
$name_departments[3] ผลเป็น 74860 ซึ่งตรงกับ array ที่ต้องการให้แสดงครับ
#2

ลองเอา query ไปใส่ phpmyadmin ดูก่อนครับ ว่าผลออกมาถูกต้องหรือไม่ (มันต้องถูกต้องนะ)
จริงๆ ผมไม่เข้าใจสิ่งที่ต้องการเท่าไร แต่ดูคร่าวๆเหมือนจะไม่ถูกต้อง (ผิดที่วิธีคิด เลยทำให้เขียนโค้ดผิด)
จริงๆแล้วชื่อแผนกมันอยู่ตรงนี้แล้ว $item_name_departments->topic เอาไปใช้เลยมันก็จบละ
แต่ในความเป็นจริง user อาจจะมีแผนกซ้ำกันก็ได้ ทำให้ผลลัพท์ที่ได้มันไม่ตรงกับ user ผมแนะนำให้เก็บแผนกใส่แอเรย์ แล้วเวลาจะเอาใส่ลงในข้อความก็ค่อยอ่านจากแอเรย์แทน
เช่น $categories[$item_name_departments->category_id] = $item_name_departments->topic;
เวลาเอาไปใช้ก็เช่น
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$categories[$name_departments[3]].' (เดาๆเอานะ)
คำเตือน ตามปกติแล้ว การอ่านข้อมูลจากตาราง category จะต้องมี type กำกับด้วยนะครับ เพราะ category_id ในระบบสามารถซ้ำกันได้
#3

ครับ ผมจะลองดูครับอาจารย์
สิ่งที่ต้องการคือ
อยากได้รายชื่อแผนก/ฝ่าย == ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, ( โพสด้านบน ผมใส่สรรพนามผิดไปครับ เปลี่ยนจาก นาย ก ข ค ง เป็น ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, ฝ่าย ง, ครับ)
ซึ่งชื่อแผนก/ฝ่ายอยู่ใน ตาราง category ฟิว topic ครับ
ตัวแปรอ้างอิง id ที่ค้นหาออกมาเป็น---> ( ,74814,74828,74860,74853, )----> อยู่ในตาราง edocument ฟิว department ครับ ซึ่งผมนำมาเก็บไว้ใน
$name_departments=explode(',',',74814,74828,74860,74853,'); เพื่อเอาเครื่องหมาย , ออก แล้วนำไปค้นจาก ตาราง category ตามโค๊ดด้านล่างครับ

$name_departments=explode(',',',74814,74828,74860,74853,'); // ตัวแปรอ้างอิง id
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }

$gNAME ที่ต้องการให้เก็บค่า เพื่อจะนำไปแสดงค่า คือ ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, แต่มันออกมา 1 รายการ คือ ค่า 74814 ที่เท่ากับ ฝ่าย ก ครับ
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$gNAME.',', // แสดงแผนก รับ
--------------------------------------------------
ข้อความที่ส่งไปทางเมล์ / ไลน์

งานสารบรรณ
ส่งถึงฝ่าย / แผนก ----->>>>::: ฝ่าย ก, (ฝ่าย ข, ฝ่าย ค, ฝ่าย ง, ไม่ออก ครับ)
เลขที่เอกสาร: ที่ 02-11-66/000012
เรื่อง: ตำราสอบ เลื่อนฐานะ เป็นนายตำรวจ
วันที่: 02 พ.ย. 2566 เวลา 20:16 น.
ผู้ส่ง ----->>>>: แอดมิน
------------------------------------------------------
**จริงๆ แล้ว อาจารย์ตอบคอมเม้นมาคำตอบมันอยู่ในนั้นแล้วก็ได้ครับ เพียงผมไม่เข้าใจและนำมันเอามาใช้ไม่ถูกเท่านั้นครับ
#4

การเรียกใช้คำสั่งของ Query Builder (E-doc) ข้อมูลแมาแค่แถวเดียว
อ้างอิงจาก ความคิดเห็น #4จริงๆแล้วชื่อแผนกมันอยู่ตรงนี้แล้ว $item_name_departments->topic เอาไปใช้เลยมันก็จบละ

ใช่ครับ
#5

คำตอบเหมือนเดิมครับ คำแนะนำคือ เก็บชื่อแผนกใส่แอเรย์ไว้ก่อนครับ (ซึ่งน่าจะเอาออกมาได้แล้วนะ) แล้วค่อยเอาไปใช้งานทีหลังครับ ผมแนะนำให้เปลี่ยนวิธีคิด อย่าไปจมกับความคิดเดิม หลักๆคือมันอ่านออกมาแล้วเอามาใช้เลยไม่ได้ ต้องเอามาจัดรูปแบบก่อน ถ้าอยากรู้ว่ามันเอาออกมาครบถ้วนหรือไม่ก็ print_r ออกมาดูเลย แล้วไปดูผลลัพท์ที่ console ของบราวเซอร์
#6

ขอบคุณครับ
ตอนนี้ ผมลอง
->debug()
และ
print_r($gNAME);
ผลออกมาตามด้านล่างแล้วครับ
SELECT * FROM `devrdco1_edoc`.`edoc_category` WHERE `category_id` IN ('74814', '74828', '74860', '74853')
Array
(
[0] => ฝ่าย ก
[1] => ฝ่าย ข
[2] => ฝ่าย ค
[3] => ฝ่าย ง
)
#7

0 1 2 เอา category_id ใส่ไว้ครับ เวลาใช้งานจะเรียกจาก id ได้เลย
#8

อ้างอิงจาก ความคิดเห็น #80 1 2 เอา category_id ใส่ไว้ครับ เวลาใช้งานจะเรียกจาก id ได้เลย

ขอคุณครับ อาจารย์ครับได้แล้วครับ $XX= implode($...) เอาครับ
ข้อมูล ออกตามที่ต้องการแล้วครับ (ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, ฝ่าย ง,)
จาก code ด้านล่าง

// กำหนดข้อมูลเพื่อทดสอบ
$datass = ',74814,74828,74860,74853,';
$name_departments = explode(',', trim($datass, ','));

$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
//->debug()
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) {
$gNAME[]=$item_name_departments->topic;
$new_gNAME = implode($gNAME).',';
} // $gNAME[]=$item_name_departments->topic; }
$ret = array();
// ข้อความ
$msg = array(
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$new_gNAME, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
);
#9

ดูงงๆนะ ถ้าต้องการเอาข้อมูลแผนกทั้งหมดมาต่อกัน
foreach ($query_name_departments->execute() as $item_name_departments) {
$gNAME[]=$item_name_departments->topic;
}
$new_gNAME = implode(', ', $gNAME);

บรรทัดนี้ต้องเอาไว้นอก foreach ใน foreach ใส่ไว้เฉพาะที่ต้องใส่ลงในแอเรย์เท่านั้น
#10
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg, png ขนาดไฟล์ไม่เกิน 2M