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() 方法來篩選已上架的產品:

$products = Product::available()->get();

Product::available() 返回一個自訂的 ProductBuilder 實例,並在其中應用 available() 方法的條件。然後,我們可以使用 get() 方法來執行查詢,獲取已上架的產品。

你可以根據自己的需求自訂更多的方法和邏輯。通過自訂 newEloquentBuilder,你可以根據具體情況為模型添加更多自定義的查詢功能,以滿足你的項目需求。