Tuỳ chỉnh Repository

Tuỳ chỉnh Repository

QueryBuilder

Bạn có thể tùy chỉnh thứ tự sắp xếp và điều kiện tìm kiếm cho phương thức tạo QueryBuilder trong lớp kho lưu trữ. Nó có thể được sử dụng với các phương pháp sau.

Class QueryKey
ProductRepository:: getQueryBuilderBySearchData() QueryKey::PRODUCT_SEARCH
ProductRepository::getQueryBuilderBySearchDataForAdmin() QueryKey::PRODUCT_SEARCH_ADMIN
ProductRepository::getFavoriteProducttQueryBuilderByCustomer() QueryKey::PRODUCT_GET_FAVORITE
CustomerRepository::getQueryBuilderBySearchData() QueryKey::CUSTOMER_SEARCH
OrderRepository::getQueryBuilderBySearchData() QueryKey::ORDER_SEARCH
OrderRepository::getQueryBuilderBySearchDataForAdmin() QueryKey::ORDER_SEARCH_ADMIN
OrderRepository::getQueryBuilderByCustomer() QueryKey::ORDER_SEARCH_BY_CUSTOMER

Là một giao diện để tùy biến, chúng tôi cung cấp như sau.

Interface/Class Tổng quan
QueryCustomizer QueryBuilder tự do thay đổi
OrderByCustomizer Thay đổi thứ tự sắp xếp
WhereCustomizer Thêm tiêu chí tìm kiếm
JoinCustomizer Thêm một bảng tham gia

 

ProductRepository::getQueryBuilderBySearchDataForAdmin() đây là một mẫu luôn sắp xếp theo ID sản phẩm. Trong phương thức getQueryKey (), getQueryKey() nó được tự động kích hoạt bằng cách chỉ định phương thức bạn muốn áp dụng.

<?php

namespace Customize\Repository;

use Eccube\Doctrine\Query\OrderByClause;
use Eccube\Doctrine\Query\OrderByCustomizer;
use Eccube\Repository\QueryKey;

class AdminProductListCustomizer extends OrderByCustomizer
{
    /**
     * Luôn sắp xếp theo ID sản phẩm
     *
     * @param array $params
     * @param $queryKey
     * @return OrderByClause[]
     */
    protected function createStatements($params, $queryKey)
    {
        return [new OrderByClause('p.id')];
    }

    /**
     * ProductRepository::getQueryBuilderBySearchDataForAdmin
     *
     * @return string
     * @see \Eccube\Repository\ProductRepository::getQueryBuilderBySearchDataForAdmin()
     * @see QueryKey
     */
    public function getQueryKey()
    {
        return QueryKey::PRODUCT_SEARCH_ADMIN;
    }
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *