認識 SQL 子查詢(Subquery)
在資料庫查詢中,子查詢(Subquery)是一個非常有用的技術,可以幫助我們編寫更複雜的查詢,並從多個表中擷取所需的資料。在本文中,會以MySQL方法為主,介紹什麼是子查詢,以及如何在SQL查詢中使用它。 什麼是子查詢?子查詢是一個SQL查詢,它嵌套在另一個查詢中。子查詢可以返回一個值、一個列或一個資料集,並且可以用於WHERE、FROM、SELECT、JOIN等子句中。子查詢通常用於從多個表中擷取資料,或者在查詢中使用聚合函數。 如何使用子查詢?以下是一個簡單的例子,展示如何在SQL查詢中使用子查詢: 123SELECT column1, column2FROM table1WHERE column1 = (SELECT column1 FROM table2 WHERE column2 = 'value'); 在這個例子中,我們在table1中查詢column1和column2的值,並使用子查詢從table2中擷取column1的值。子查詢的結果將用於WHERE子句中,以過濾table1的結果。 子查詢的優點子查詢有以下幾個優點: 提高查詢的靈活性:子...
單一登入(SSO):簡化您的網路體驗
在今天的數位時代,我們每天都要處理多個在線平台和網站,包括社交媒體、電子郵件、雲端存儲等等。這樣的多重登入程序不僅繁瑣,還容易導致安全問題。但是,有一種名為單一登入(Single Sign-On,SSO)的技術可以解決這些問題,並為用戶提供更簡單、更安全的網路體驗。 什麼是單一登入?單一登入(SSO)是一種身份驗證技術,允許用戶通過一組憑證(例如用戶名和密碼)登入多個相關的網站或應用程式。換句話說,一旦您登入了其中一個服務,您就可以無需再次輸入憑證,自動訪問其他相關的服務,無縫地進行切換。 SSO的工作原理SSO的工作原理相對簡單,它基於一個名為「權威方」的服務來管理用戶身份驗證。當用戶嘗試登入一個相關的服務時,該服務將請求傳送給權威方進行身份驗證。如果用戶已經在權威方登入,它將通過,並將授予訪問該服務的權限,而無需再次輸入憑證。 SSO的好處用戶便利性:最明顯的好處是提高了用戶的便利性。用戶無需記住多個不同的登入憑證,大大簡化了登入程序,節省了時間和精力。 提高安全性:雖然有人可能認為將所有憑證集中在一個位置會增加風險,但實際上,SSO可以提高安全性。透過SSO,管理者可以實施...
Laravel Blade Component 簡單介紹
前言關於 Laravel Blade Component 的介紹,官方文件寫得很清楚,這邊簡單的介紹常見用法,並且提供一些實際的使用案例。 簡介Laravel Blade Component 是在 Laravel 7.0 版本中新增的功能,主要是用來取代原本的 Blade include,讓我們可以更方便的將重複的 HTML 結構抽出來,並且可以透過 Blade Component 的方式來使用,以下分別介紹兩種元件元件與匿名元件。 元件標準的元件形式,相較匿名元件複雜一點,但是可以更好的管理元件的參數與HTML結構。 建立元件1php artisan make:component Input 建立元件後,會在 app/View/Components 中建立一個 Input.php,並且在 resources/views/components 中建立一個 input.blade.php。接著我們就可以在 Input.php 中定義元件的參數,並且在 input.blade.php 中定義元件的 HTML 結構。 123456789101112131415161718192021...
Laravel Blade用法筆記
Blade簡單介紹在Laravel中,Blade是一個模板引擎,可以用來將PHP原始碼和HTML混合在一起,並且可以使用一些簡單的語法來處理資料,讓程式碼更加簡潔。 Blade基本語法 {{ }}用於輸出變數,例如{{ $title }},此用法會自動把輸出的內容做HTML轉義,例如{{ $title }}輸出<h1>title</h1>會變成<h1>title</h1> {!! !!}而這語法不會做其他動作,直接輸出原始值,例如{!! $title !!} @php用於寫原生PHP,例如@php echo $title; @endphp,也可以使用@php($title)來簡化 @if、@elseif、@else、@endif用於處理if的情況,用法如下: 1234567@if (count($records) === 1) I h...
Laravel Validator介紹與用法
Validator簡單介紹在Laravel中,Validator是一個驗證器,可以用來驗證使用者輸入的資料是否符合規定。在認識這個之前,很常需要針對請求過來的各欄位資料特別處理,導致專案變大時,重複的驗證方法四散各地,難以維護。而Validator就是為了解決這個問題而生的,它可以將驗證的規則寫在一個地方,並且可以重複使用,讓程式碼更加簡潔。 Validator基本上有分兩種驗證:以下兩種功能基本上相同,只是第一種自動幫你做了不少事情;第二種則是完全客製化,可以自己定義錯誤行為,但是要自己處理跳轉、錯誤訊息等等。 Request物件中的驗證: 可以直接從request物件中使用驗證方法,並且會自動把request資料帶入驗證,其中第一個參數可以填入各欄位的驗證規則,第二個參數可以填入自訂錯誤訊息,範例如下: 123456789101112131415use Illuminate\Http\Request;// rqeuest物件中的validate方法function index(Request $request){ $validated = $request-...
Laravel ORM用法筆記
ORM簡單介紹在Laravel中,ORM的主要工具是Eloquent。Eloquent提供了一種直覺式的方法來操作資料庫,讓資料表和模型之間建立了一對一或一對多的映射關係。以下是一些ORM操作的基本用法。 ORM資料種類 Laravel撈資料幾種類型: ORM:Eloquent 模型,可以$data->$field和$data[$field],有getter,setter QueryBuilder:關連數組(ArrayAccess),只能$data->$field,也有getter,setter(僅限一維以下才有,因為是stdClass) Laravel兩種常用特別的資料格式: Collection: Laravel內建物件,有很多內建用法,但是存取資料基本上以陣列索引訪問為主 12$a = ['a' => 123];$a = collect($a); StdClass: PHP原生的物件,簡單來說就是讓資料可以對象屬性訪問 12$a = ['a' => 123];$a = (object) (...
物件導向必備知識-SOLID
當我們開始設計和撰寫程式碼時,我們經常遇到的挑戰之一是如何創建易於維護和擴展的程式碼。為了解決這些問題,軟體工程師們引入了SOLID原則,這是一組五個基本原則,用於指導物件導向設計。在這篇部落格中,我們將深入探討每個原則,提供錯誤和正確的程式碼示例,以及相關的解釋。 單一職責原則 (Single Responsibility Principle, SRP)原則: 一個類別應該只有一個單一的職責。 錯誤範例: 123456789class User { public function createUser($userData) { // 創建新使用者 } public function sendEmail($userEmail, $message) { // 發送郵件 }} 在上面的錯誤範例中,User 類別負責創建使用者和發送郵件,這違反了單一職責原則。 正確範例: 1234567891011class User { public function cr...
依賴注入(Dependency Injection)優缺點
在實際開發中,只要內容開始複雜,使用到的類別越來越多,就會慢慢發現,為什麼我只是要抽換或更改其中的類別,卻會限制這麼多以及需要大量改動。這時我才注意到這個主題的重要性,但是在了解依賴注入之前讓我們先談談甚麼是控制反轉(IoC)。 控制反轉控制反轉(Inversion of Control,簡稱 IoC),它指的是將應用程式的控制權轉移到外部元件或框架,以實現更大程度的可配置性和可擴展性。IoC強調的是將依賴管理的責任從應用程式內部移出,通常透過依賴注入來實現。IoC有助於改善軟體架構,降低耦合性,提高可測試性,並使系統更容易配置和調整。 依賴注入依賴注入(Dependency Injection,簡稱 DI)是一種軟體設計模式,主要用途於解決程式碼中的相依性問題。在傳統的程式設計中,一個類通常負責創建和管理其所需的相依物件。然而,這種方式容易導致高耦合的程式碼,難以測試和維護。 從以上兩點說明可以知道,控制反轉是一種解除依賴降低於耦合性的概念,至於依賴注入則是實現該概念其中一種方法。 範例說明有一個紀錄Log的服務,以下為具體實現服務的類別FileLogger和Database...
抽象(abstract)與介面(interface)差異
前言為了讓自己更能理解各種觀念,因此寫文章來讓自己加深印象,並使用PHP來說明範例。 抽象簡單來說就是嚴格版的父類別,因為父類別有的功能他幾乎都有,但是有以下四點差異: 不可實例化 使用abstract關鍵字定義類別 可以加入抽象方法,並且子類別必須實作,否則子類別會被標記為抽象類別 抽象方法可以只定義方法的簽名,也就是方法的名稱與參數,或是也可以定義具體方法 介面簡單來說就是閹割版抽象類別,並且更加嚴格,因為功能少了很多,使用上多了不少的限制,如以下幾點: 不可加入具體方法與屬性,方法只能定義簽名,但是可以使用常數 不可有建構函式 不可有public以外的定義方式 子類別不可隨意實作方法,必須全部實作 但是介面也多了一點只有它才有的功能,可支援多重繼承,也就是子類別可同時實現多個介面。至於兩者的詳細差異請參考以下表格: 兩者差異 差異點 抽象(Abstract) 介面(Interface) 定義 使用 abstract 關鍵字定義 使用 interface 關鍵字定義 實例化 不能直接實例化 不能直接實例化 繼承 類別只能繼承一個 類別可以實現多個...
《原子習慣》個人極力推薦的勵志書,不只勵志更是工具書
買了這本書到現在,至少讀過3次,書中充滿各種標籤與筆記,時不時會回來翻閱來提醒自己,對這本書有很深的感情,因此想把這本書分享大家,就讓我簡單的介紹一下這本葵花寶典,以及我自己認為相當重要的幾個重點與自己的心得吧 ! 什麼是”原子”習慣?相信很多人看到書名後一頭霧水,原子是啥 ? 國中化學好像有學到…阿忘了拉 ! 之類的反應XD。 其實”原子”就是非常細小、細微的意思,從化學角度來說的話它是細胞中最小的單位。也就是說原子習慣的意思是”細微的”習慣,那為什麼作者要以這個名字為書名呢 ? 書中不斷強調每一個微小改變都會造就龐大的改變,所謂複利的力量不可小看,開頭便提到「每天進步1%,持續一年你能獲得37倍成長;每天退步1%,持續一年你會弱化,甚至倒退到零;你的一點小改變、一個好習慣,都會產生驚人的加乘效應」,就像投資一樣,短時間因為成長幅度甚小沒有實感,但經過時間不短累積加成,成果便會有超越自己所想像的成果。 那要如何養成好習慣呢? 只要四個簡單法則相信很多人都有過這樣的經驗,終於下定決心並且也做了計劃要養成好習慣,但是堅持了一週就默默移出了記憶,養成好習慣真的好難QQ。這本書就以大家...















