数据分析-基础维度

这并不是什么理论性,标准,只是自己在实践的过程中认为其符合“数据分析-基础维度”这一概念,姑且称之,如有思维错误,请留言改正

1 什么是基础维度?

比如写的这篇文章,你在上方搜索 数据分析-基础维度,这篇文章会显示出来。或者你搜索什么是基础维度?这篇文章也会显示出来。
也可以这样理解,有A1 A2 A3 ...An这样n条数据,根据某一条件或者某几个条件(条件互不影响)查找出某一条或者某几条结构一样的数据,称之为-基础维度的数据分析

2 怎么使用

从上面可以了解,对mysql来说,就是一个sql的条件查询,请注意基础维度关注的是一点

select * from posts where title='xxx' and content='xxxx';

你可能会问,比如说 between xxx and xxx 查询,这关注的不是一个,而是一个线。这里要澄清一下,其实这里也是关注的一个,这些,还是在同一维度上,只不过是有多个而已。最后它们造成的结果,在这基础维度上是一样的,只不过数据多了几条者少了几条,并没有改变这基础维度

3 Laravel 怎么优雅的使用

这里推荐用DB,为什么不用Eloquent ORM。当然在基础维度上,这两者都可以,但之后的时间维度空间维度就有点捉襟见忖了。

1 在这里定义一个基础维度的抽象类

<?php namespace App\Services\Search\Db\Filter;

use Illuminate\Http\Request;
use Illuminate\Database\Query\Builder;

abstract class QueryFilter
{

    protected $request;
    protected $builder;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function apply(Builder $builder)
    {
        $this->builder = $builder;
        $this->init();

        foreach ($this->filters() as $name => $value) {
            if($value){
                if (method_exists($this, $name)) {
                    call_user_func_array([$this, $name],[$value]);
                }
            }

        }

        return $this->builder;
    }

    protected function init()
    {
        //子类可以做一些初始化的查询
    }
    public function filters()
    {
        return $this->request->all();
    }
}

2 接着 PostFilter 继承抽象类

<?php

namespace App\Services\Search\Db\Filter;

class PostFilter extends QueryFilter
{

    public function title($title)
    {
        return $this->builder->where('title', 'like', "%{$title}%");
    }

    public function content($content)
    {
        return $this->builder->where('content','like', "%{$content}%");
    }
}

3 最后去使用

use DB;

DB::table('posts')->where(function($query){
    app(\App\Services\Search\Db\Filter\PostFilter::class)->apply($query);

})->get();

请求数据的时候带着title或者content自动去查询

本作品采用《CC 协议》,转载必须注明作者和本文链接
Make everything simple instead of making difficulties as simple as possible
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

如果是or查询就不适应了

4年前 评论
jcc123

@lovecn

 public function content($content)
    {
        return $this->builder->orWhere('content','like', "%{$content}%");
    }
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!