Menu

Monday, September 30, 2019

[Laravel - Model] วิธีเปลี่ยน User Model สำหรับการ Authentication เมื่อสร้าง User Model เอง
[Laravel - Model] How to Change User Model for Authentication when Create User Model Manually

หลังจากที่เราสร้าง User model ใหม่หรือมีการย้าย path ของ User model เดิมไปไว้ยังที่ใหม่ เราต้องแก้ไขค่าของ model ในไฟล์ config/auth.php ด้วย

เมื่อเปิดไฟล์ config/auth.php เราจะเจอบรรทัดที่กำหนดค่าเริ่มต้นของ model เป็น App\User::class ตามรูปข้างล่าง ให้ทำการแก้ไขบรรทัดดังกล่าวเป็น Class ของ User ที่ต้องการ


เพียงเท่านี้ User model ของเราก็จะถูกเรียกใช้โดย Laravel โดยอัตโนมัติ

Thursday, September 26, 2019

[Excel] ประเภทการอ้างอิงถึง Cell ใน Excel
[Excel] Type of Cell Reference in Excel

การอ้างอิงถึง Cell หรือ Cell Reference ถูกใช้เมื่อต้องการอ้างอิงถึง Cell อื่นๆ จาก Cell ที่เราใส่สูตรคำนวณ โดย Cell ดังกล่าวจะขึ้นต้นด้วย = (Equal Sign)

การอ้างอิงถึง Cell สามารถแบ่งเป็นประเภทได้ดังนี้
  1. ประเภทการอ้างอิงถึง Cell แบ่งตามจำนวน Cell ที่อ้างอิง
    • การอ้างอิงถึง Cell เดียว สามารถใช้ชื่อ column ตามด้วยเลขแถวได้เลย เช่น A1
    • การอ้างอิงถึง Cell แบบเป็นช่วง จะใช้การอ้างอิงถึง Cell เดียว 2 อันคั่นด้วย : (colon) เช่น A1:A30

  2. ประเภทการอ้างอิงถึง Cell แบ่งตามที่อยู่ของ Cell ที่อ้างอิง
    • การอ้างอิงถึง Cell ที่อยู่ใน Worksheet เดียวกัน สามารถใช้ชื่อ column ตามด้วยเลขแถวได้เลย เช่น A1
    • การอ้างอิงถึง Cell ที่อยู่คนละ Worksheet ต้องใส่ชื่อ Sheet นำหน้าตามด้วย ! (Exclamation Mark) แล้วจึงตามด้วยการอ้างอิงถึง Cell ที่อยู่ใน Worksheet เดียวกัน เช่น Sheet2!A1
    • การอ้างอิงถึง Cell ที่อยู่คนละ Workbook ต้องใส่ชื่อไฟล์ใน [] (Square Brackets) แล้วจึงตามด้วยการอ้างอิงถึง Cell ที่อยู่คนละ Worksheet เช่น [Book1.xlsx]Sheet1!A1
    หมายเหตุ ในกรณีที่ชื่อ Sheet หรือชื่อไฟล์มีช่องว่าง ต้องใส่ ' (Single Quote) ครอบเอาไว้ เช่น 'Target sheet'!A1 หรือ '[Target file.xlsx]Sheet1'!A1

  3. ประเภทการอ้างอิงถึง Cell แบ่งตามรูปแบบการอ้างอิงของ Cell
    • การอ้างอิงถึง Cell แบบ Relative สามารถใช้ชื่อ column ตามด้วยเลขแถวได้เลย เช่น A1
    • การอ้างอิงถึง Cell แบบ Absolute ต้องใช้ $ (Dollar Sign) นำหน้าชื่อ column และหมายเลขแถว เช่น $A$1
    • การอ้างอิงถึง Cell แบบ Mixed เป็นการผสมการอ้างอิงแบบ Relative และ Absolute เช่น A$1 หรือ $A1
หมายเหตุ การอ้างอิงถึง Cell ทั้งสามประเภท สามารถนำมาใช้ผสมกันได้ เช่น Sheet1!A$1:A$5

Tuesday, September 17, 2019

[Laravel - Model] สรุป syntax ต่างๆของ where หรือ orWhere ที่ใช้ในการ Query
[Laravel - Model] Syntax of where or orWhere that is used in Query

สมมติว่า User เป็น model ของ Laravel ซึ่งมีตารางที่คู่กัน คือ users

หากเราต้องการเรียกดูข้อมูล user ที่มี name เป็น 'test'

สำหรับ SQL ก็คือ
select * from users where name = 'test';
สำหรับ Laravel สามารถใช้ syntax ได้ตามข้างล่างนี้
  1. User::where('name', 'test')->get(); 
  2. User::where('name', '=', 'test')->get();
  3. User::where(['name' => 'test'])->get();
  4. User::where([['name', '=', 'test']])->get();
  5. User::where(function($q){ 
        $q->where('name', 'test');
    })->get();
ทั้ง 5 รูปแบบข้างต้น จะถูกแปลงเป็น SQL ตามข้างต้นในการ Query ข้อมูลจาก database

หมายเหตุ รูปแบบที่ 5 เป็นการส่ง parameter แบบ Closure สำหรับการ Query ที่ซับซ้อน ซึ่งภายใน Closure นี้สามารถใช้ where ได้ตาม syntax ข้างบนเช่นกัน

[Laravel - Laradock] ข้อควรระวัง: การใช้ Laradock สำหรับการรันหลายโปรเจค จะทำให้ data folder ของแต่ละโปรเจคทับกัน ถ้าตั้งค่า env ไม่ถูกต้อง
[Laravel - Laradock] Warning: Using Laradock for Many Projects will Use the Same Data Folder if Set env Incorrect

เวลาที่เรา build และ run container ของ Laradock จะมีการสร้าง folder สำหรับเก็บข้อมูลของ Laradock ที่ path ~/.laradock/data ซึ่งเป็นค่าตั้งต้นใน env-example

Folder นี้จะเก็บข้อมูล data ของ mysql, redis และอื่นๆที่จำเป็นไว้

ถ้าหากเราใช้ Laradock ในการรันโปรเจคมากกว่า 1 โปรเจค โดยไม่แก้ไข path ดังกล่าว จะทำให้ทุกโปรเจคใช้งาน data folder ที่ path เดียวกัน

แน่นอน!!! มันจะเกิดข้อผิดพลาดขึ้นแน่นอน...

สมมติว่า โปรเจคนั้นๆใช้ mysql container ของ Laradock เป็น database

สิ่งที่ต้องเจอแน่ๆเลย คือ ข้อมูลหาย!!! เพราะ data ของโปรเจคนึงไปทับของอีกโปรเจคนึง

วิธีการป้องกัน คือ แก้ไขไฟล์ .env ใน Laradock ดังนี้
# Choose storage path on your machine. For all storage systems

DATA_PATH_HOST=~/.laradock/{project_name}
โดยที่ {project_name} เป็นชื่อของโปรเจคที่จะรันโดย Laradock

Monday, September 9, 2019

[Laravel - Exception] วิธีการแสดง Validation Errors บนหน้าเว็บ
[Laravel - Exception] How to Display Validation Errors on Web Page

เนื่องจากใช้ฟังก์ชั่น validate ตาม code ข้างล่าง
public function update()
    $this->validate($this->request, [
        'ids' => 'required|array',
        'ids.*' => 'required|integer',
    ]);
    return 'test';
}
ทำให้เวลาที่ Validate request ไม่ผ่าน มันจะ throw ValidationException โดยอัตโนมัติ ซึ่งวิธีการ Handle มี 3 วิธีดังนี้
  1. ใช้ try...catch ครอบ code ส่วน validation เพื่อ handle ValidationException ที่เกิดขึ้นในแต่ละ function ของ controller
  2. เพิ่มการ handle ใน Handler class เพื่อเป็น handle กลางสำหรับ ValidationException ที่ไม่ถูก handle จากข้อแรก
  3. ข้ามข้อ 1 และ 2 แล้วนำ ValidationException มาแสดงผลบนหน้าเว็บ เนื่องจากเวลาเกิด ValidationException ระบบจะ redirect กลับไปหน้าก่อนหน้าพร้อมกับตัวแปรชื่อ $errors
สำหรับวิธีการแสดง Validation Error บนหน้าเว็บ ให้ใส่ code ด้านล่างนี้ในส่วนของ Blade template
@foreach ($errors->all() as $error)
    <div>{{$error}}</div>
@endforeach
หมายเหตุ  ตัวแปร $errors ข้างต้นไม่สามารถตรวจสอบได้ โดยการ inspect ดู Network ของ browser และการเรียกดูจาก request ใน controller

Tuesday, September 3, 2019

[Python] วิธีการเขียนไฟล์ Excel ใน Python
[Python] How to Write Excel File in Python

การเขียนไฟล์ Excel จำเป็นต้องใช้ package xlsxwriter ซึ่งสามารถติดตั้งโดยรันคำสั่งต่อไปนี้
pip install xlsxwriter
ตัวอย่างการใช้งาน เช่น
import xlsxwriter

### สั่งสร้างไฟล์ Excel
workbook = xlsxwriter.Workbook('filepath')

### สร้าง Sheet ที่ต้องการใช้งาน โดยใช้ชื่อ default ที่เป็น Sheet1, Sheet2, ...
worksheet = workbook.add_worksheet()

### สร้าง Sheet ที่ต้องการใช้งาน โดยระบุชื่อ Sheet
worksheet2 = workbook.add_worksheet('sheetname')

### เขียนข้อมูลลง Sheet
row = 0
col = 0
for i in range(20):
    worksheet.write(row, col, i)
    col += 1

### ปิดไฟล์ Excel เมื่อเขียนเสร็จ
workbook.close()

[Python] วิธีการอ่านไฟล์ Excel ใน Python
[Python] How to Read Excel File in Python

การอ่านไฟล์ Excel จำเป็นต้องใช้ package xlrd ซึ่งสามารถติดตั้งโดยรันคำสั่งต่อไปนี้
pip install xlrd
ตัวอย่างการใช้งาน เช่น
import xlrd

### สั่งเปิดไฟล์ Excel
workbook = xlrd.open_workbook('filepath')

### เลือก Sheet ที่ต้องการใช้งานจากชื่อของ Sheet
worksheet = workbook.sheet_by_name('sheetname')

### เลือก Sheet ที่ต้องการใช้งานจากตำแหน่งของ Sheet
worksheet2 = workbook.sheet_by_index(0)

### แสดงจำนวนแถวทั้งหมด
print(worksheet.nrows)

### แสดงจำนวนคอลัมน์ทั้งหมด
print(worksheet.ncols)

### แสดงค่าข้อมูลแถวที่ระบุ
print(worksheet.row_values(1))

### แสดงค่าข้อมูล cell ที่ระบุ
print(worksheet.cell_value(0, 0))

Monday, September 2, 2019

[GIT] วิธีการเปลี่ยน Remote URL ของ GIT Repository
[GIT] How to Change Remote URL of GIT Repository

การเปลี่ยน Remote URL ของ GIT Repository จำเป็นต้องใช้ 2 คำสั่งดังนี้
  • คำสั่งสำหรับตรวจสอบ GIT remote URL ปัจจุบัน
    git remote -v
  • คำสั่งสำหรับตั้งค่า Remote URL ของ GIT Repository ใหม่
    git remote set-url <current_remote_name> <new_git_remote_url>
โดยที่ new_git_remote_url จะมีรูปแบบ URL ดังนี้
  • URL สำหรับ HTTPS
    https://github.com/USERNAME/REPOSITORY.git
  • URL สำหรับ SSH
    git@github.com:USERNAME/REPOSITORY.git