Laravel5.1 数据库--DB运行原生SQL

Laravel操作数据库有三种:DB原生SQL、构建器、Model。这三种依情况而决定使用哪种更合适。

那么今儿咱就从DB原生SQL说起:


1 用DB门面原生SQL语句操作

用DB门面操作的话呢 无非就是:insert、select、update、delete 另外附加一个statement(通用语句 比如drop之类的)。

1.1 insert

    public function getInsert()
    {
        DB::insert(‘INSERT INTO articles (title, body)VALUE(?, ?)‘, [‘learn laravel‘, ‘balablalabalabla‘]);
    }

insert方法接受两个参数 第一个参数呢 就是原生的SQL语句,第二个参数是一个数组 对应的sql语句中的?

1.2 select

    public function getArticles(){
        $articles = DB::select(‘SELECT * FROM articles WHERE title=:title‘, [‘title‘ => ‘learn laravel‘]);
        foreach ($articles as $article){
            echo "<p>$article->id</p>";
            echo "<p>$article->title</p>";
            echo "<p>$article->body</p>";
        }
    }

我们的占位符不仅仅是? 也可以用":name" 来表示,对应的数组就是一对儿一对儿的键值。

1.3 update

    public function getUpdate()
    {
        $affected = DB::update(‘UPDATE articles SET title=:title,body=:body WHERE id=:id‘,[‘title‘ => ‘laravel database‘, ‘body‘ => ‘balabala‘, ‘id‘ => 1]);
        echo $affected;
    }

update方法还返回了一个affected 这是受到影响的总行数。

1.4 delete

    public function getDelete()
    {
        $affected = DB::delete(‘DELETE FROM articles WHERE id=:id‘, [‘id‘ => 2]);
        echo $affected;
    }

1.5 statement

    public function getDrop()
    {
        DB::statement(‘DROP TABLE articles‘);
    }

2 监听查询

我们可以用 listen方法 监听每一次操作数据库动作,这样我们就可以用于 记录日志啊 调试啊什么的:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function($sql, $bindings, $time){
            // $sql      = 查询语句
            // $bindings = 绑定的键和值 数组类型
            // 所用的时间
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
时间: 2024-08-05 11:14:03

Laravel5.1 数据库--DB运行原生SQL的相关文章

SQLite的使用(一):简介及原生SQL操作数据库

一.SQLite概述 SQLite 是一个轻量级的.嵌入式的.关系型数据库.它支持 SQL 语言,开源,可移植性好.它的数据是以单个文件形式存储的,存储位置为data/data/<项目文件夹>/database下. 二.常用类说明 SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库创建.打开.关闭等操作. SQLiteDatabase 数据库访问类:执行对数据库的插入记录.查询记录等操作. Cursor 查询结构操作类:用来访问查询结果中的记录 2.1 SQLit

Laravel5.1 数据库-查询构建器

今儿个咱说说查询构建器.它比运行原生SQL要简单些,它的操作面儿也是比较广泛的. 1 查询结果 先来看看它的语法: public function getSelect() { $result = DB::table('articles')->get(); dd($result); } 查询构建器就是通过table方法返回的,使用get()可以返回一个结果集(array类型) 这里是返回所有的数据,当然你也可以链接很多约束. 1.1 获取一列/一行数据 public function getSel

MySQL 数据库性能优化之SQL优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段. 2.降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就

MySQL 数据库性能优化之SQL优化【转】

优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段. 降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段

数据库入门之运行原始 SQL 查找x

一旦你设置好了数据库连接,就可以使用 DB facade 来进行查找.DB facade 提供每个类型的查找方法:select.update.insert.delete.statement. 下面兄弟连帮你一一介绍. 运行一个 Select 查找# 在 DB facade 中使用 select 可以运行一个基本的查找: <?php namespace App\Http\Controllers; use DB; use App\Http\Controllers\Controller; class

数据库入门之运行原始 SQL 查找

一旦你设置好了数据库连接,就可以使用 DB facade 来进行查找.DB facade 提供每个类型的查找方法:select.update.insert.delete.statement.下面兄弟连帮你一一介绍. 运行一个 Select 查找# 在 DB facade 中使用 select 可以运行一个基本的查找: <?php namespace App\Http\Controllers; use DB; use App\Http\Controllers\Controller; class U

atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect

#-----原理 Hibernate 运行期获得Dialect 2010-07-28 12:59:58|  分类: 软件开发 |举报 |字号 订阅 String dialect = ((SessionFactoryImpl) session.getSessionFactory()).getDialect() .getClass().getName(); //     //org.hibernate.dialect.MySQLDialect 如果是spring + hibernate则可以: St

Hibernat 原生SQL运行结果集处理方法

hibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的. Session.createSQLQuery(); 使用list()方法可以把Session.createSQLQuery()的结果集处理成List返回,将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值.Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型. 如果要避免过多的使用ResultSetMetadata,或者只是为了

Flask(flask_sqlalchemy)使用原生sql,多个数据库用法进行封装

app.py from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy() 新建一个py文件db_seeson.py from init import db def fetch_to_dict(sql, params={}, fecth='all', bind=None): ''' dict的方式返回数据 :param sql: select * from xxx where name=:name