laravel版本DB,EloquentORM不固定条件查询封装

Lucene学习总结之二:Lucene的总体架构 Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包 阅读详情

支持DB与ORM的来构建查询。
DB构建sql语句已在多个项目中使用,[ORM方式不兼容,需要对 $this->builder赋值操作。需要修改方法里$this->builder赋值操作,如 self::where($this->builder, $where); 需改成 $this->builder = self::where($this->builder, $where); 如有需要自行修改与测试]

where条件构建说明

参数: [“字段名”,“操作符”,“查询值”,“与前一个条件的关系[默认and]”] 与db的where方法一致

1.如果是等于,可以省略"操作符" :
[“username”, “chen”] 或 [“username”,"=" , “chen”]

2.大于:
[“createtime”, “>”, “2019-1-1”]

3.如果为or,那就得一写全:
[“username”, “=”, “chen”, “or”]

4.其它的where兼容db的where方法

测试

1.and与or混合条件

// where与orderby是一个二维数组
$wehre = [['yearid', 2010], [['price', '>', 0], ['issticky', '=', 1, 'or']]];
$column = ['id', 'name'];
$bll->list($where,$column,[['sort', 'desc'], ['id', 'asc']]);
// select id,name form test where yearid=2010 and (price>0 or issticky=1) order by sort desc,id asc

2.ORM方法测试

$builder = new Builder(User::class);
$datas = $builder->get([['id', 1]]);
// 加载关系表数据
$datas->load(['userCards.userCardPhotos', 'userCards.userCardTags']);

!!! 别的测试方法就不写了,与Laravel的db api一致,只是在构建了一个where方法

主要代码

<?php
namespace Extend\Query;

use Illuminate\Database\Query\Builder as dbBuilder;
use \Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class Builder
{
    /**
     * MySql的构造器
     * @var dbBuilder|Model
     */
    protected $builder;

    public function __construct($table)
    {
        // orm方式不兼容,需要修改方法里$this->builder赋值操作,如  self::where($this->builder, $where); 需改成  $this->builder = self::where($this->builder, $where);
        // $this->builder = is_string($table) && strpos($table, '\\') === false ? DB::table($table) : ($table instanceof Model ? $table : new $table);
        $this->builder = DB::table($table) ;
    }

    /**
     * 根据表id获取数据
     * @param  $id
     * @param array $column
     * @return mixed
     * @author: qic
     */
    public function getById($id, $column = null)
    {
        $where = ['id' => $id];
        if (!empty($column)) {
            $column = self::getColumn($column);
            $this->builder->select($column);
        }
        $model = $this->builder->where($where)->first();
        return $model;
    }

    /**
     * 根据表id获取数据
     * @param array $ids
     * @param null $column
     * @return array
     * @author: qic
     */
    public function getByIds(array $ids, $column = null)
    {
        if (!empty($column)) {
            $column = self::getColumn($column);
            $this->builder->select($column);
        }
        $list = $this->builder->whereIn('id', $ids)->get();
        return $list;
    }

    /**
     * 获取表信息内容
     * @param array $where 条件
     * @param array $column 获取的列名
     * @param array $orderby 排序
     * @param int $page 当前页
     * @param int $pagerows 每页记录数
     * @param null $total 返回记录总数 null不计算返回
     * @return Model|dbBuilder|\Illuminate\Support\Collection|string
     */
    public function get(array $where, $column = null, $orderby = null, int $page = 1, int $pagerows = 10, &$total = null)
    {
        if (!empty($column)) {
            $column = self::getColumn($column);
            $this->builder->select($column);
        }
        self::where($this->builder, $where);
        if ($total !== null) {
            $total = $this->builder->count();
            if ($total == 0) {
                return $this->builder;
            }
        }
        if ($page > 0 && $pagerows > 0) {
            $this->builder->skip(($page - 1) * $pagerows)->take($pagerows);
        }
        if (!empty($orderby)) {
            foreach ($orderby as $item) {
                if (is_array($item)) {
                    $this->builder->orderBy(...$item);
                } elseif (is_string($item)) {
                    $this->builder->orderByRaw($item);
                }
            }
        }

        return $this->builder->get();
    }

    /**
     * 获取总数
     * @param array $where
     * @return int
     */
    public function count(array $where)
    {
        self::where($this->builder, $where);
        return $this->builder->count();
    }

    /**
     * 获取一条数据
     * @param array $where
     * @param null $column
     * @return array
     * @author: qic
     */
    public function getFirst(array $where, $column = null, $orderby = null)
    {
        if (!empty($column)) {
            $column = self::getColumn($column);
            $this->builder->select($column);
        }
        self::where($this->builder, $where);
        if (!empty($orderby)) {
            foreach ($orderby as $item) {
                $this->builder->orderBy(...$item);
            }
        }

        return $this->builder->first();
    }

    /**
     * @param $builder
     * @param $where
     * @return dbBuilder
     * @author: qic
     */
    public static function where($builder, $where)
    {
        if (count($where)) {
            foreach ($where as $item) {
                //一维数组
                if (!is_array($item[0])) {
                    $op = '=';
                    if (count($item) > 2)
                        $op = str_replace(' ', '', strtolower($item[1]));
                    switch ($op) {
                        case 'in':
                            unset($item[1]);
                            $builder->whereIn(...$item);
                            break;
                        case 'notin':
                            unset($item[1]);
                            $builder->whereNotIn(...$item);
                            break;
                        default:
                            $builder->where(...$item);
                            break;
                    }
                } else {
                    //多维数组
                    $builder->where(function ($query) use ($item) {
                        self::where($query, $item);
                    });
                }
            }
        }
        return $builder;
    }

    /**
     * 获取查询的列
     * @param $column
     * @return array|null
     * @author: qic
     */
    protected static function getColumn($column)
    {
        $cols = [];
        if (is_array($column)) {
            $cols = $column;
        } else if (is_string($column)) {
            $cols = explode(',', $column);
        }
        return $cols;
    }
}

go语言gorm版本不定条件查询数据封装
https://www.jianshu.com/p/e59cc4f8c4ea
https://github.com/qicmsg/go_vcard

保姆级教程:QGC地面站Vehicle Setup全模块配置详解(从固件升级到安全设置) 本文提供QGC地面站Vehicle Setup全模块配置的保姆级教程,涵盖从固件升级到安全设置的完整流程。详细解析二次开发环境准备、传感器校准、飞行模式配置等关键步骤,帮助用户快速掌握无人机配置技巧,确保飞行安全与性能优化。 阅读详情

相关推荐

SDR实战(四)-AD9361使用手册(三)

本节定义了并行数据端口和串行外设接口(SPI),它们使得AD9361与基带处理器(BBP)之间能够传输数据和控制/状态信息。图63展示了这些接口,并提供了AD9361和BBP在宽带无线系统中使用方式的高级概述。数据接口以两种模式之一运行:兼容标准CMOS模式或兼容低压差分信号(LVDS)模式。每个接口都具有以下部分描述的独特特性。使用CMOS模式时:保持了单端-CMOS逻辑兼容性。可以使用一个或两个数据端口。使用两个端口可以提高数据吞吐量。

hutx0924的博客 6246

如何在 ThinkPHP 中整合 Laravel Eloquent ORM

前言 之前维护的旧项目采用的 ThinkPHP 3.2,后面学习了 Laravel 后,觉得 TP 的 Model 功能没有 Laravel 强大和方便,并想把 Laravel 里的 Eloquent 用在 TP 里。 好在 Laravel 的 ORM 是独立成包的,可以用于符合要求的其他 PHP 系统中。 整合 要使用的是 illuminate/database 。 安装 illuminate...

X先生说 1117

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

tp3.2升级tp5需要注意的变化

I方法用input代替;D和M方法没了,需要的话自己封装。C方法没了,需要自己封装,配置文件说明官方文档写的不对,无法使用 Session的使用发生很大变化 模板渲染,控制器传空值会报错 模板内置标签的尖括号变成大括号 框架整体风格无限逼近Yii框架和Laravel getfield用value来替换 官方的指导: 3.2版本无法直接升级到5.0版本,这里只是给出了升级指导...

646

candence layout快捷键

摁住鼠标左键再框选:选中 摁住鼠标右键再框选:放大 选中之后,滚动鼠标滚轮进行放大缩小。 F:回到全局 shift+V:缩小 键盘的箭头:移动视图 F1:显示帮助文档Candence help F2:保存 点击r,画出矩形时不双击鼠标,点击F3,可以设置尺寸。 Creat-Shape-Path Creat-Wiring-Bus:画多根线。F3设置线宽、间距等。 选中金属后,Shift+G画保护环guard ring。F3可以设置距离金属的间距、保护环的形状。 Path和Rectang

weixin_45861827的博客 2655

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1549

php封装查询条件,如何写一个属于自己的数据库封装(6) - 查询 - WHERE篇

开始之前WHERE 篇中, where 的各种应用方式都来自 Laravel本篇将在 Builder.php 的每个 where 函数最后边给出例子方便理解Builder.phpwhere - 基本的 where 用法where 函数用法多样, 请参考例子public function where($column, $operator = null, $value = null, $boolean...

weixin_36372094的博客 305

120、ISP 驱动架构解析:从 V4L2 请求到 ISP 硬件的配置下发流程

本文以实际案例解析ISP驱动架构的V4L2到硬件配置下发流程。作者通过一个因内存共享导致画面闪烁的bug案例,详细剖析了用户空间参数通过V4L2结构体传递、驱动层拆包与硬件寄存器映射、时序同步机制等关键环节。特别强调深拷贝、dirty flag增量更新、shadow register等实现要点,并给出多路并发隔离、寄存器写入失败等典型问题的排查方法。文章建议开发者深入理解参数到寄存器的转换过程,推荐通过debugfs实时监控寄存器状态,避免过度依赖自动调试工具。全文以实践为导向,对ISP驱动开发具有直接指导

sundong_81的博客 159

laravel 分页器查询 封装

laravel 分页器查询 封装 /** * 分页查找数据||全部查找数据($page_size < 0) * @param $where 要查询的条件 * @param array $select 查询的字段 * @param array $with 关联表 * @param array $whereHas 关联的whereHas * @param array $whereIn 关联的whereIn * @param array

weixin_46945048的博客 475

3D点云-CVPR 2020-PF-Net: Point Fractal Network for 3D Point Cloud Completion

是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像素点与原来像素点比较完成模型的训练。而PF-Net就是采用GAN的思想在3D点云上的应用。

404 Not Found 2369

W5500以太网&PoE扩展模块原理图设计,已量产

本文将以 W5500 以太网 & PoE 扩展板为对象,从嵌入式硬件设计的视角,深度拆解其电路架构、核心器件选型、关键功能实现,以及这款板子解决行业痛点的设计思路。

不脱发的程序猿 945

laravel5.1封装查询

如下 <?php namespace App\Models\Traits; use DB; trait PublicTrait { /**where $where=[ ['car_type_id','=',$car_type_id], ['code','like',"%{$code}%"], 'or'=>[ ['字段名','=','123']

sll9711的博客 442

微信小程序 “net::ERR_CONNECTION_REFUSED” 报错大揭秘与破解之道

在微信小程序开发与运行过程中,“net::ERR_CONNECTION_REFUSED” 报错是开发者常遇难题。该错误意味着小程序与服务器连接建立失败,会导致功能无法使用、数据加载异常等问题,严重影响用户体验和业务运转。本文系统剖析此错误,从网络环境不佳、服务器异常、小程序配置有误等常见触发场景入手,提供网络、服务器、配置、代码等多维度排查步骤,给出针对性解决策略,如修复网络、处理服务器故障、修正配置与代码错误,还提出开发与运维阶段的预防措施,助力开发者高效解决该报错问题。

邓邓子的博客 6136

Laravel Eloquent ORM 多条件查询

一、需求: 在数据搜索时最常见的就是调用同一个方法查询,而查询的字段却可能是其中一个或其中的几个字段一起组合查询,例如:对列表的搜索,基本上都是几个字段随意组合搜索。那么在model里就需要判断有那个字段组合,怎么组合。        网上找了很久,Laravel群里也问了几个,都说没有写过,于是自己写个吧。话不多说,见代码: [php] view plain c

叶落无痕的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

laravel/hyperf 对列表页面查询搜索进行封装

列表页面有很多查询,这里进行封装 <?php namespace App\Utils; use Hyperf\Database\Model\Builder; use Hyperf\Utils\Collection; class WhereBuildUtils { public const OPERATOR = [ '=', '<', '>', '<=', '>=',

chu_yubo的博客 753

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

laravel常用操作库DB类的使用

常见DB类的用法

2201_75622149的博客 1554

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Laravel DB批量更新的方法

1.1 事例数据: $multipleData = array( array( 'from_plat_skuid' =&gt; 1022016 , 'sku_storage_num' =&gt; 100 ), array( 'fro...

network_dream的博客 5580

在 Laravel 中,将模型的查询方法 self::where 与控制器结合使用是一种常见的操作方式。这样可以将业务逻辑更好地分离

这种方式使得控制器更加简洁,将查询逻辑封装在模型中,提高了代码的复用性和可读性。同时,它也符合 MVC(模型-视图-控制器)的设计模式。的查询方法,该方法接收一个名称参数,并通过。方法中,我们获取传入的名称并调用。在数据库中进行查询。模型中定义了一个名为。方法来获取查询结果。

Xerale的博客 551

laravel orm

这么说比较抽象,我们举个计数器的例子:在一条语句中读取一个值,然后在另一条语句中更新这个值。乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制实现。使用查询构建器上的 where 方法可以添加 where 子句到查询中,调用where 最基本的方式需要传递三个参数,第一个参数是列名,第二个参数是任意一个数据库系统支持的操作符,第三个参数是该列要比较的值。

分享技术架构、运维、程序开发经验 693

gorm+ginlaravel的多条件查询(包含LIKE模糊查询、Map、Not、Order)、增、改、删MVC示例

- GinLaravel框架: Github(推荐):https://github.com/fyonecon/ginlaravel Gitee(备用):https://gitee.com/fyonecon/ginlaravel - 示例User数据库数据: 多条件查询多一个列表: - Kit数据库定义: var Db *sql.DB = driver.MysqlDb // 连接gomysql扩展 var DB *gorm.DB = driver.GDB // 连接gorm扩

User XXX Blog 2831

laravel模型获取表名_通过 Laravel Eloquent 模型实现简单增删改查操作

概述Eloquent 是一个 ActiveRecord ORM 框架,ORM 全称是 Object Relational Mapping,意为对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换,简单来说,它会构建类与数据表之间的映射关系,从而建立起一个可在编程语言里使用的「虚拟对象数据库」。「ActiveRecord」是 ORM 的一种实现模式,Eloquent 则是 ...

weixin_35985796的博客 3556

php laravel orm,Laravel 中如何对 ORM 实现理解

什么叫ORMORM,全称 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的业务对象时,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法即可。ORM 实现方式两种最常见的实现方式是 ActiveRecord 和 DataMapper (laravel 中使用的是前者)我们先来理解两个魔...

weixin_31763817的博客 564

laravel whereDoesntHave 查询不等于条件的数据

laravel whereDoesntHave 查询不等于条件的数据

wgchen 1659

laravel记录笔记Laravel 连接数据库、操作数据库的三种方式

laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式 1、连接数据库 .env 数据库配置 DB_HOST=localhost dbhost DB_DATABASE=laravel dbname DB_USERNAM...

weixin_33744141的博客 301

laravel中orm的条件筛选和排序

常规操作 筛选a字段大于10,b字段等于10的记录并按照a降序,代码如下: $query-&amp;gt;where('a','&amp;gt;',10)-&amp;gt;where('b','=','10')-&amp;gt;orderBy('a','desc')-&amp;gt;get(); 常规操作就没啥好解释的了 非常规操作筛选 筛选a字段小于b字段的所有记录并按照a降序, 分析:排序常规操作没啥好说的,主要是筛选...

你会后悔吗的博客 7833

php联合查询封装,laravel通用联合查询代码封装demo

通过i5repository的使用,觉得这个扩展包还是有很多使用不到的地方,自己用的最多的就是提供的仓库模式的使用与今天的这个demo的主角联合查询条件的自动组装,并构建好model放入控制器中使用。下面就来谈谈自己的理解,先说说启发,laravel自带的where查询有这样的写法,where(function($query){})也是实现这个demo的重要东西他会将查询的条件将model对象重新...

weixin_39759107的博客 373
上一篇: go语言对gorm不固定条件查询封装
下一篇: golang 解析html时把url转绝对路径
cqims21
博客等级 码龄18年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值