最新文章(数据分析-基础维度)

        

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自动去查询