数据分析-基础维度

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

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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

如果是or查询就不适应了

5年前 评论
jcc123

@lovecn

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

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