payamjafari/elasticute

1.2.3 2021-12-07 12:17 UTC

This package is auto-updated.

Last update: 2024-09-07 18:20:24 UTC


README

使用此构建器,您可以在不编写原始查询的情况下轻松地执行数据库查询。

安装

composer require payamjafari/elasticute

用法

只需在QueryBuilder类中调用"query"方法,您就准备好了。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()->index( 'cards' )->get();

// use $cards for your needs

过滤查询

为了过滤您的查询,您可以使用多个方法,例如wherewhereNotorWhere等。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->whereEqual( 'name', 'foo' )
    ->whereNotEqual( 'count', 10 )
    ->get(); // limit documents count by giving a number to "get". Example: get(10);

// use $cards for your needs

过滤方法

分组过滤

您可以通过向"where"方法添加一个闭包来将过滤器设置为组。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->groupShould( function( QueryBuilder $builder ){
        $builder->whereEqual( 'name', 'payam' );
        $builder->whereNotEqual( 'name', 'kourosh' );
        $builder->groupMust( function( QueryBuilder $builder ){
            $builder->whereExists( 'lastname' );
            $builder->whereTextContains( 'name', 'kourosh2' );
        } );
    } )
    ->whereTextNotContains( 'lastname', 'weber' )
    ->get();

// use $cards for your needs

分组过滤方法

聚合

聚合非常重要,并且可以在任何地方使用。所以您可以使用它非常容易。看看这个例子。

<?php

use ElastiCute\ElastiCute\Aggregation\AggregationBuilder;
use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->aggregate( function( AggregationBuilder $query ){
        $query->make('like_count')->avg()->field('like_count');
        $query->make('dislike_count')->avg()->field('dislike_count');
    } )
    ->whereTextNotContains( 'lastname', 'weber' )
    ->get();

// response will include $cards['aggregations']

聚合方法

注意:随着时间的推移,将添加更多聚合:

响应

每个请求都有一个响应,然后必须进行处理。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->get()
    ->toArray();

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->get()
    ->map( function( $value ) {
        // Do some stuff with $value
    } );

// use $cards for your needs

响应方法

排序 / OrderBy

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->sort( [
        'name' => [
            'order' => 'desc'
        ]
    ] )
    ->get();

// use $cards for your needs

分页文档

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->paginate( 10, 1 ); // paginate( int $document_per_page = 10, int $current_page = 1 )

// use $cards for your needs

选择特定字段

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->select( [ 'name', 'size' ] )
    ->get();

// use $cards for your needs

运行时选择索引

您可以通过调用"index"方法在查询中选择索引。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$cards = QueryBuilder::query()
    ->index( 'cards' )
    ->whereEqual( 'name', 'foo' ) // your filters come here before delete
    ->get();

通过id查找

通过调用"find"方法,您可以根据id检索文档。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$card = QueryBuilder::query()
    ->index( 'cards' )
    ->find( 'wDCoxXUBA0stnoJxvwdR', true ); // find( $id, bool $get_only_source = true )

获取索引映射

通过调用"mapping"方法,您可以检索索引映射。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$card = QueryBuilder::query()
    ->index( 'cards' )
    ->mapping();

提示:

您不需要首先调用"query"方法。您可以直接在开始时直接调用索引。

<?php

use ElastiCute\ElastiCute\QueryBuilder;

$card = QueryBuilder::index( 'cards' )
    ->find( 'wDCoxXUBA0stnoJxvwdR', true ); // find( $id, bool $get_only_source = true )

$cards = QueryBuilder::index( 'cards' )
    ->whereEqual( 'name', 'foo' )
    ->get();