1 Star 0 Fork 10

molpage / Discuz-Q-Docs

forked from Discuz / Discuz-Q-Docs 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
搜索数据说明.md 3.22 KB
一键复制 编辑 原始数据 按行查看 历史
chenkeke 提交于 2019-10-23 10:23 . 删除搜索offset属性

上传文件说明

  • 使用方法,依赖注入

使用方法

  • 注入 Discuz\Contracts\Search\Searcher
  • 使用 apply 方法应用搜索的对象
  • 使用 search 方法快速执行搜索
  • 使用 getSingle、getMultiple 方法获取最终搜索出来的单条或多条数据
    /**
     * {@inheritdoc}
     */
    public function data(ServerRequestInterface $request, Document $document)
    {
        // 获取当前用户
        $actor = $request->getAttribute('actor');

        // 获取请求的参数
        $inputs = $request->getQueryParams();

        // 获取请求的IP
        $ipAddress = Arr::get($request->getServerParams(), 'REMOTE_ADDR', '127.0.0.1');

        $query = ClassifyRepository::query();

        $query->where('id', $inputs['id']);

        $data = $this->searcher->apply(
            new ClassifySearch($actor, $inputs, $query)
        )->search()->getSingle();

        return $data;
    }

定义搜索的对象

  • 在 app/Searchs 里创建对应的目录与类文件,需要继承 Discuz\Search\AbstractSearch
  • includes:可被包括的关联方法
  • defaultLimit:默认显示多少条数据
  • sort:可被排序的字段
  • defaultSort:默认的排序字段
namespace App\Searchs\Classify;

use Discuz\Search\AbstractSearch;

class ClassifySearch extends AbstractSearch
{
    /**
     * 可被包括的关联方法.
     * 返回数据需要关联的数据,多个关联用","间隔,"-"会把后面的单词首字母大写拼接到前面的单词.
     *
     * @var User
     */
    public $includes = [
        'firstPost',
        'last-post',
        'user'
    ];

    /**
     * 默认显示多少条数据.
     *
     * @var int
     */
    public $defaultLimit = 10;

    /**
     * 可被排序的字段.
     *
     * @var string
     */
    public $sort = [
        'id',
        'name'
    ];

    /**
     * 默认的排序字段.
     *
     * @var string
     */
    public $defaultSort = [
        'id'=>'desc'
    ];

}

定义搜索的逻辑代码

  • 在 app/Searchs 里创建对应的目录与类文件,需要继承 AbstractSearchBuilder,命名格式必须为 [搜索的对象]Builder
  • 需要定义两种类型的方法,condition与with,condition类型的方法用于处理where条件相关的逻辑,with类型的方法用于处理with关联模型相关的逻辑
  • condition类型的方法:入参 $actor:用户的模型,$query:数据的模型,$content:条件的参数
  • with类型的方法:入参 $actor:用户的模型,$query:数据的模型
namespace App\Searchs\Classify;

use Discuz\Search\AbstractSearchBuilder;
use Discuz\Api\Events\SearchModelField;

class ClassifySearchBuilder extends AbstractSearchBuilder
{
    /**
     * 定义查询条件的方法
     *
     * @param $actor
     * @param $query
     * @param $content
     * @return null
     */
    public function name($actor, $query, $content)
    {
        $query->where('name', 'like', '%'.$content.'%');

        $this->event->dispatch(
            new SearchModelField($actor, $query, 'name', $content)
        );
    }

    /**
     * 定义关联模型的方法
     *
     * @param $actor
     * @param $query
     * @return null
     */
    public function firstPost($actor, $query)
    {

    }
}
1
https://gitee.com/molpage/Discuz-Q-Docs.git
git@gitee.com:molpage/Discuz-Q-Docs.git
molpage
Discuz-Q-Docs
Discuz-Q-Docs
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891