自訂 Laravel Query Builder:使用 newEloquentBuilder

Query Builder 是一個強大的工具,用於構建和執行資料庫查詢。有時候我們可能需要更進一步地自訂 Query Builder,以滿足特定的需求。在這篇文章中,我們將深入探討 Laravel 的 Query Builder,並介紹如何使用 newEloquentBuilder 來自訂 Query Builder,以提供更彈性和強大的資料庫查詢功能。 創建一個自訂的ProductBuilder 類別,繼承 Illuminate\Database\Eloquent\Builder use Illuminate\Database\Eloquent\Builder; class ProductBuilder extends Builder { public function available() { return $this->where('status', 'available'); } } 接下來,我們需要在相應的 Product 模型中指定使用自訂的 ProductBuilder,而不是默認的 Builder: use Illuminate\Database\Eloquent\Model; class Product extends Model { /** * Get a new query builder instance for the model. * * @param \Illuminate\Database\Query\Builder $query * @return \App\Builders\ProductBuilder */ public function newEloquentBuilder($query) { return new ProductBuilder($query); } } 我們可以在使用 Product 模型進行查詢時,使用 available() 方法來篩選已上架的產品:...

May 22, 2021 · Yish

遞迴處理多維陣列的 Laravel Collection 方法

在 Laravel 開發中,我們經常需要處理複雜的多維陣列數據。遍歷和操作這些多維陣列可能變得困難且冗長。幸運的是,Laravel 提供了一個強大的 Collection 類,並且我們可以通過自定義方法擴展 Collection 的功能。 新增 recursive 方法到 Laravel Collection 首先,我們需要將 recursive 方法添加到 Laravel 的 Collection 中。這可以通過使用 Collection::macro 方法來實現。這個方法允許我們自定義 Collection 的新方法。以下是 recursive 方法的程式碼: use Illuminate\Support\Collection; Collection::macro('recursive', function () { return $this->map(function ($value) { if (is_array($value) || is_object($value)) { return collect($value)->recursive(); } return $value; }); }); 使用 recursive 方法遞迴處理多維陣列 現在我們已經將 recursive 方法添加到 Laravel Collection 中,我們可以在我們的項目中使用它來遞迴處理多維陣列了。以下是一個示例: $collection = collect([ 'name' => 'John', 'age' => 30, 'address' => [ 'street' => '123 Main St', 'city' => 'New York', 'country' => 'USA', ], ]); $result = $collection->recursive(); $result->dd(); 在上面的示例中,我們創建了一個包含多維陣列數據的 $data 變數。然後,我們將它轉換為 Laravel Collection 並存儲在 $collection 中。接下來,我們使用我們剛剛添加的 recursive 方法對 $collection 進行遞迴處理。最後,我們使用 dd() 函式來輸出處理後的結果。通過新增 recursive 方法到 Laravel Collection,我們可以輕鬆地處理多維陣列數據。遞迴處理多維陣列能夠幫助我們在 Laravel 項目中更有效地遍歷和操作數據。

May 22, 2019 · Yish