สืบเนื่องจากโพสต์ [Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model ที่เราเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล โดยใช้การเข้ารหัสและถอดรหัสของ Laravel ซึ่งใช้ APP_KEY ใน .env เป็น key ทำให้คนที่เข้าถึง application สามารถถอดรหัสข้อมูลได้
เพื่อเพิ่มความปลอดภัยขึ้นไปอีกขั้น เราจะเปลี่ยนจากการใช้ APP_KEY ใน .env เป็น SSH Keys ซึ่งแยกเป็น Public key และ Private key แทน โดยเราจะได้เพียง Public key มาใช้ในการเข้ารหัส แต่คนมีสิทธิ์ดูข้อมูลเท่านั้นที่จะมี Private key เพื่อใช้ถอดรหัสข้อมูล
Menu
Showing posts with label eloquent. Show all posts
Showing posts with label eloquent. Show all posts
Tuesday, February 25, 2020
Thursday, November 28, 2019
[Laravel - Model] การตั้งค่า Attribute ของ Model ให้เป็น Lower Case
[Laravel - Model] How to Set Model Attribute to Lower Case
บางครั้งเราจำเป็นต้องทำระบบที่เชื่อมต่อกับฐานข้อมูลเดิมที่มีอยู่แล้ว และฐานข้อมูลเหล่านั้นอาจจะมีชื่อ column เป็นตัวพิมพ์ใหญ่ทั้งหมด เวลาใช้งานแต่ละ column จะต้องพิมพ์ชื่อเป็นตัวพิมพ์ใหญ่ ทำให้ยากต่อการเขียนโค้ด
สำหรับ Laravel แล้ว เราสามารถตั้งค่าเพื่อให้เปลี่ยนชื่อ column พวกนี้เป็นตัวพิมพ์เล็ก เมื่อเราเรียกใช้งานได้
สำหรับ Laravel แล้ว เราสามารถตั้งค่าเพื่อให้เปลี่ยนชื่อ column พวกนี้เป็นตัวพิมพ์เล็ก เมื่อเราเรียกใช้งานได้
วิธีการตั้งค่า
- เข้าไปที่ config/database.php
- เพิ่มโค้ดข้างล่างในส่วนของ connections ที่ต้องการ
'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::ATTR_CASE => PDO::CASE_LOWER, ]) : [ PDO::ATTR_CASE => PDO::CASE_LOWER, ],
Wednesday, November 27, 2019
[Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model
[Laravel - Model] Field Values Encryption and Decryption in Laravel Model
ในบางกรณี เราต้องการรักษาความลับของข้อมูล โดยอนุญาตให้เฉพาะผู้ที่เกี่ยวข้องเท่านั้นที่สามารถดูและแก้ไขได้ ระบบส่วนใหญ่จึงจำกัดสิทธิ์การใช้งานของแต่ละผู้ใช้งานภายใน application
อย่างไรก็ตาม ระบบดังกล่าวยังคงเก็บข้อมูลจริงลงฐานข้อมูลโดยไม่มีการเข้ารหัสใดๆ ทำให้ Database Admin ยังสามารถเข้าดูข้อมูลและแก้ไขได้
การเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล จึงเป็นการเพิ่มความปลอดภัยของข้อมูลอีกขั้นนึง
สำหรับ Laravel Model ที่มี function กลางสำหรับการดึงค่าข้อมูลและเก็บข้อมูลของ Fields ต่างๆ ทำให้การเข้ารหัสและถอดรหัสนั้นทำได้ง่ายขึ้นมาก เราเพียงเขียน Trait แล้วนำไปใส่ใน Model พร้อมกับกำหนด Fields ที่เราต้องการเข้ารหัสเท่านั้น
อย่างไรก็ตาม ระบบดังกล่าวยังคงเก็บข้อมูลจริงลงฐานข้อมูลโดยไม่มีการเข้ารหัสใดๆ ทำให้ Database Admin ยังสามารถเข้าดูข้อมูลและแก้ไขได้
การเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล จึงเป็นการเพิ่มความปลอดภัยของข้อมูลอีกขั้นนึง
สำหรับ Laravel Model ที่มี function กลางสำหรับการดึงค่าข้อมูลและเก็บข้อมูลของ Fields ต่างๆ ทำให้การเข้ารหัสและถอดรหัสนั้นทำได้ง่ายขึ้นมาก เราเพียงเขียน Trait แล้วนำไปใส่ใน Model พร้อมกับกำหนด Fields ที่เราต้องการเข้ารหัสเท่านั้น
Friday, November 22, 2019
[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Sluggable
[Laravel - Package] How to Install and Config Laravel Sluggable
Eloquent-Sluggable เป็น package เสริมสำหรับสร้าง Slug ภายใน Laravel Model โดยจะสร้าง Slug ใส่ฟิลด์ที่ระบุให้โดยอัตโนมัติ เมื่อมีการบันทึกข้อมูล
วิธีการติดตั้ง
- สั่งติดตั้ง Eloquent-Sluggable package
- สร้างไฟล์ config ของ package ใน project
composer require cviebrock/eloquent-sluggable
php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider"
[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Activity Log
[Laravel - Package] How to Install and Config Laravel Activity Log
laravel-activitylog เป็น package สำหรับใช้จัดเก็บ log การใช้งานของ user ยิ่งไปกว่านั้น package นี้สามารถเก็บ log จาก model event ได้โดยอัตโนมัติ
วิธีการติดตั้ง
- สั่งติดตั้ง laravel-activitylog package
- สร้างไฟล์ migration ของ package ใน project
- รัน migrate เพื่อสร้างตารางในฐานข้อมูล
- สร้างไฟล์ config ของ package ใน project
composer require spatie/laravel-activitylog
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"
Thursday, November 21, 2019
[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Permission
[Laravel - Package] How to Install and Config Laravel Permission
laravel-permission เป็น package สำหรับจัดการ roles และ permissions ของ user ใน database
วิธีการติดตั้ง
- สั่งติดตั้ง laravel-permission package
- สร้างไฟล์ migration ของ package ใน project
- รัน migrate เพื่อสร้างตารางในฐานข้อมูล
- สร้างไฟล์ config ของ package ใน project
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
Thursday, October 3, 2019
[Laravel - Model] วิธีการ Query Pivot Table ของ Laravel Model
[Laravel - Model] How to Query Pivot Table of Laravel Model
การ select ข้อมูลโดยเอาข้อมูลจาก Pivot Table ด้วย
$this->devices()->withPivot()->get();การอ้างอิงถึง column ใน Pivot Table จะใช้ pivot_ นำหน้าชื่อ column ที่ต้องการ ตามตัวอย่างข้างล่าง
$user->devices()->orderBy('pivot_updated_at', 'desc')->paginate();การ update ข้อมูลใน Pivot Table โดยอ้างอิงจาก relation
$this->devices()->updateExistingPivot($deviceId, [ 'status' => 'active', 'updated_at' => Carbon::now(), ]);การรัน statement ที่ Pivot Table โดยตรง ซึ่งต้องใส่เงื่อนไขใน where เอง
$this->devices()->newPivotStatement() ->where('user_id', $userId) ->whereIn('device_id', $deviceIds) ->update(['status' => 'inactive']);หมายเหตุ การรัน statement ที่ Pivot Table โดยตรง สามารถเปลี่ยนจาก update เป็น delete เพื่อลบข้อมูล หรือเป็น get เพื่อดึงข้อมูลมาแสดง
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 ที่ต้องการ
เมื่อเปิดไฟล์ config/auth.php เราจะเจอบรรทัดที่กำหนดค่าเริ่มต้นของ model เป็น App\User::class ตามรูปข้างล่าง ให้ทำการแก้ไขบรรทัดดังกล่าวเป็น Class ของ User ที่ต้องการ
เพียงเท่านี้ User model ของเราก็จะถูกเรียกใช้โดย Laravel โดยอัตโนมัติ
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 ก็คือ
หมายเหตุ รูปแบบที่ 5 เป็นการส่ง parameter แบบ Closure สำหรับการ Query ที่ซับซ้อน ซึ่งภายใน Closure นี้สามารถใช้ where ได้ตาม syntax ข้างบนเช่นกัน
หากเราต้องการเรียกดูข้อมูล user ที่มี name เป็น 'test'
สำหรับ SQL ก็คือ
select * from users where name = 'test';สำหรับ Laravel สามารถใช้ syntax ได้ตามข้างล่างนี้
User::where('name', 'test')->get();
User::where('name', '=', 'test')->get();
User::where(['name' => 'test'])->get();
User::where([['name', '=', 'test']])->get();
User::where(function($q){ $q->where('name', 'test'); })->get();
ทั้ง 5 รูปแบบข้างต้น จะถูกแปลงเป็น SQL ตามข้างต้นในการ Query ข้อมูลจาก database
หมายเหตุ รูปแบบที่ 5 เป็นการส่ง parameter แบบ Closure สำหรับการ Query ที่ซับซ้อน ซึ่งภายใน Closure นี้สามารถใช้ where ได้ตาม syntax ข้างบนเช่นกัน
Monday, August 5, 2019
[Laravel - Model] ข้อควรระวังของการใช้ฟังก์ชั่น where
และ orWhere
ของ Laravel Model
[Laravel - Model] Warning: Using where
and orWhere
functions of Laravel Model
สมมติว่า
ถ้าเราต้องการ query ข้อมูล โดยใช้ SQL ดังนี้
OrganizationChildren
เป็น Laravel model ที่ผูกกับตารางorganization_children
ในฐานข้อมูลOrganizationChildren
ประกอบด้วยฟิลด์parent_organization_id
และchild_organization_id
$org1->id
และ$org2->id
เป็นค่าid
ของOrganization
โดยมีค่าเป็น1
และ2
ตามลำดับ
ถ้าเราต้องการ query ข้อมูล โดยใช้ SQL ดังนี้
select * from `organization_children` where (`parent_organization_id` = 1 and `child_organization_id` = 2) or (`parent_organization_id` = 2 and `child_organization_id` = 1)
Tuesday, January 15, 2019
[Laravel - Model] การแปลง Query Builder ไปเป็น SQL Query String
[Laravel - Model] How to Convert Query Builder to SQL Query String
สาเหตุที่ต้องแปลง Query Builder ไปเป็น SQL Query String ก็มีหลายสาเหตุด้วยกัน เช่น การ debug query ที่เกิด error ขึ้น เป็นต้น ซึ่งสามารถใช้โค้ดได้ตามด้านล่างนี้
$sql= str_replace(array('?'), array('\'%s\''), $query->toSql()); $sql = vsprintf($sql, $query->getBindings());เมื่อ
$query
คือ Query Builder และ $sql
คือ Query String ที่ได้จากการแปลง
Subscribe to:
Posts (Atom)