亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Symfony EasyAdminBundle 3 重寫 createIndexQuer

Symfony EasyAdminBundle 3 重寫 createIndexQuer

PHP
狐的傳說 2023-10-15 14:49:19
EasyAdminBundle 文檔上說例如,index() 操作調用名為 createIndexQueryBuilder() 的方法來創建用于獲取索引列表上顯示的結果的 Doctrine 查詢構建器。如果您想自定義該列表,最好重寫 createIndexQueryBuilder() 方法而不是整個 index() 方法。因此,讓我們想象一下,當用戶被刪除時,我在用戶實體中將字段 isDeleted 設置為 true。在索引頁面中,我想僅顯示 isDeleted = false 的用戶。如何為此目的重寫 createIndexQueryBuilder() ?這是方法 createIndexQueryBuilderpublic function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder{    return $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);}我嘗試像這樣覆蓋它,但沒有成功public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder{    $response = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);    $response->where('isDeleted', true);    return $response;}
查看完整描述

4 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您所需要的只是在 where 子句中添加entity.:)


public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder

{

    parent::createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters);


    $response = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);

    $response->where('entity.isDeleted = 1');


    return $response;

}


查看完整回答
反對 回復 2023-10-15
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

這對我的 EasyAdmin 4.x 有用


use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;


class CampaignCrudController extends AbstractCrudController

{

    public function __construct(EntityRepository $entityRepository)

    {

        $this->entityRepository = $entityRepository;

    }


    public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): ORMQueryBuilder

    {

        $response = $this->entityRepository->createQueryBuilder($searchDto, $entityDto, $fields, $filters);

        $response->andWhere('entity.user = :user')->setParameter('user', $this->getUser());


        return $response;

    }


查看完整回答
反對 回復 2023-10-15
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

EasyAdmin4解決方案


注意:關鍵字(別名)entity很重要


use Doctrine\ORM\QueryBuilder;


class ArticleCrudController extends AbstractCrudController

{

     ...


     public function configureFields(string $pageName): iterable

     {

          return [

                ...

                AssociationField::new('author')->setQueryBuilder(

                fn (QueryBuilder $queryBuilder) => $queryBuilder

                   ->leftJoin('entity.article', 'a')

                   ->andWhere('entity.isActive = 1')

                   ->andWhere('a.author is NULL')

                  ),

                ...

            ]

      }


      ...

}


查看完整回答
反對 回復 2023-10-15
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

對于每個使用接受的答案并通過搜索找到以下 QueryException 的人:


QueryException 

Too many parameters: the query defines 1 parameters and you bound 3

EntityCrudController 內的 EasyAdmin v3.x:


使用->andWhere()函數

使用實體。作為前綴(實際上,使用“實體”,不要替換為您的實體名稱)

public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder

{

    $response = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);

    $response->andWhere('entity.isDeleted = 1');   

    return $response;

}


查看完整回答
反對 回復 2023-10-15
  • 4 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號