首页 后端开发 php教程 Laravel如何操作数据库?Laravel数据库操作的三种方式(代码)

Laravel如何操作数据库?Laravel数据库操作的三种方式(代码)

Jul 25, 2018 pm 05:45 PM

Laravel是PHP Web开发框架(PHP Web Framework)。它可以让你从杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。那么,laravel框架是如何操作数据库的呢?请看一下具体的内容。

Laravel提供了3种操作数据库方式:DB facade(原始方式)、查询构造器和Eloquent ORM。

数据库的配置文件在config目录下的database.php里。打开这个文件,找到mysql的配置项。


这里有个env,它其实是调用了laravel根目录下的.env文件,这个文件存储了Laravel 数据库配置的信息。打开它。修改为项目的数据库信息即可。


请自行建一个数据库,其中数据库得包含vipinfo表,并且插入一些数据,以方便下面使用。表的结构如下图。

顾名思义:这张表是会员表,分别有会员ID(主键),会员名字,会员类型,会员积分等字段。

一、数据库操作之DB facade

   在app->Http->Controllers目录下新建一个Student控制器,StudentController.php。 StudentController.php代码如下:

<?php 
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;class StudentController extends Controller {
 
}
登录后复制

1.laravel 数据库查询

在Student控制器里添加一个test1方法,查询用的是DB类的静态方法select(),参数是原生的sql语句,返回的是一个二维数组。dd()是laravel提供的方法,可以将一个数组以节点树的形式展示出来。具体代码如下:

public function test1()
{
    $student=DB::select("select * from vipinfo");    //返回一个二维数组  
    $student    var_dump($student);        //以节点树的形式输出结果    
    dd($student);
}
登录后复制
登录后复制

路由配置: Route::get('test1',['uses'=>'StudentController@test1']);

URL访问:http://localhost/laravel/public/index.php/test1 ,则会打印出结果。

2.新增操作

新增使用的是DB类的静态方法insert(),第一个参数是sql语句,第二个参数是一个数组,数组里放要插入的数据。这里?是占位符,通过数据库接口层pdo的方式,达到防sql注入的目的。返回的是执行的结果。插入成功则返回true,否则为false。

public function test1()
{
    $student=DB::select("select * from vipinfo");    //返回一个二维数组  
    $student    var_dump($student);        //以节点树的形式输出结果    
    dd($student);
}
登录后复制
登录后复制

3. 更新操作

更新使用的是DB类的静态方法update(),第一个参数是sql语句,第二个参数是一个数组,数组里的元素分别对应sql语句里的问号。更新成功返回true。

    $bool=DB::update(&#39;update vipinfo set vip_fenshu= ? where vip_ID= ? &#39;,[700,5]);
    var_dump($bool);  //更新成功返回true
登录后复制

4. 删除操作

删除使用的是DB类的静态方法delete(),第一个参数是sql语句,第二个参数是一个数组,数组里的元素分别对应sql语句里的问号。返回的是删除的行数。

    $num=DB::delete(&#39;delete from vipinfo where vip_ID= ?&#39;,[5]);
    echo $num;
登录后复制

二、数据库操作之查询构造器

laravel查询构造器提供了方便流畅的接口,用来建立及执行数据库查找语法。使用了pdo参数绑定,使应用程序免于sql注入,因此传入的参数不需要额外转义特殊字符。基本上可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行。

1.使用查询构造器实现增删改查

同样在Student控制器里测试以下代码:

(1)新增

    $bool=DB::table("vipinfo")->insert([&#39;vip_ID&#39;=>6,&#39;vip_name&#39;=>&#39;zls&#39;,&#39;vip_type&#39;=>"出行",&#39;vip_fenshu&#39;=>800]);
    echo $bool; //返回bool值
    //如果想得到新增的id,则使用insertGetId方法
    $id=DB::table("vipinfo")->insertGetId([&#39;vip_ID&#39;=>5,&#39;vip_name&#39;=>&#39;wyp&#39;,&#39;vip_type&#39;=>"出行",&#39;vip_fenshu&#39;=>800]);
    echo $id;
    //插入多条数据
    $bool=DB::table("vipinfo")->insert([
    [&#39;vip_ID&#39;=>5,&#39;vip_name&#39;=>&#39;wyp&#39;,&#39;vip_type&#39;=>"出行",&#39;vip_fenshu&#39;=>800],
    [&#39;vip_ID&#39;=>6,&#39;vip_name&#39;=>&#39;zls&#39;,&#39;vip_type&#39;=>"出行",&#39;vip_fenshu&#39;=>800],
    ]);
    echo $bool; //返回bool值
登录后复制

(2)修改

$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->update([&#39;vip_fenshu&#39;=>500]);
echo $bool;
//自增
$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->increment("vip_fenshu");//自增1
$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->increment("vip_fenshu",3);//自增3
echo $bool;
//自减
$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->decrement("vip_fenshu");//自1
$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->decrement("vip_fenshu",3);//自增3
echo $bool;
//自增时再修改其他字段
$bool=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->increment("vip_fenshu",3,[&#39;vip_name&#39;=>&#39;dbdibi&#39;]);//自增3
登录后复制

(3)删除

$num=DB::table("vipinfo")->where(&#39;vip_ID&#39;,6)->delete();//删除1条
$num=DB::table("vipinfo")->where(&#39;vip_ID&#39;,&#39;>&#39;,4)->delete();//删除多条
echo $num;  //删除的行数
$num=DB::table("vipinfo")->truncate();//删除整表,不能恢复,谨慎使用
登录后复制

(4)查询

//get()返回多条数据
$student=DB::table("vipinfo")->get();
 var_dump($student);  
//first()返回1条数据
$student=DB::table("vipinfo")->first();  //结果集第一条记录
$student=DB::table("vipinfo")->orderBy(&#39;vip_ID&#39;,&#39;desc&#39;)->first();//按vip_ID倒序排序
var_dump($student);  
//where()条件查询
$student=DB::table("vipinfo")->where(&#39;vip_ID&#39;,&#39;>=&#39;,2)->get(); //一个条件   
$student=DB::table("vipinfo")->whereRaw(&#39;vip_ID> ? and vip_fenshu >= ?&#39;,[2,300])->get(); //多个条件
dd($student);
//pluck()指定字段,后面不加get
$student=DB::table("vipinfo")->pluck(&#39;vip_name&#39;);
dd($student);
//lists()指定字段,可以指定某个字段作为下标
$student=DB::table("vipinfo")->lists(&#39;vip_name&#39;,&#39;vip_ID&#39;);   //指定vip_ID为下标
dd($student);
$student=DB::table("vipinfo")->lists(&#39;vip_name&#39;);   //不指定下标,默认下标从0开始
//select()指定某个字段
$student=DB::table("vipinfo")->select(&#39;vip_name&#39;,&#39;vip_ID&#39;)->get();
dd($student);
//chunk()每次查n条
$student=DB::table("vipinfo")->chunk(2,function($students){  //每次查2条
    var_dump($students);
    if(.......) return false;  //在满足某个条件下使用return就不会再往下查了
});
登录后复制

2.使用聚合函数

//count()统计记录条数$nums=DB::table("vipinfo")->count();
echo $nums;//max()某个字段的最大值,同理min是最小值$max=DB::table("vipinfo")->max("vip_fenshu");
echo $max;//avg()某个字段的平均值$avg=DB::table("vipinfo")->avg("vip_fenshu");
echo $avg;//sum()某个字段的和$sum=DB::table("vipinfo")->sum("vip_fenshu");
echo $sum;
登录后复制

四、数据库操作之 - Eloquent ORM

1.简介、模型的建立及查询数据

简介:laravel所自带的Eloquent ORM 是一个ActiveRecord实现,用于数据库操作。每个数据表都有一个与之对应的模型,用于数据表交互。

建立模型,在app目录下建立一个Student模型,即Student.php,不需要带任何后缀。

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
    //指定表名
protected $table= &#39;vipinfo&#39;;
//指定主键
protected $primaryKey= &#39;vip_ID&#39;;
}
登录后复制

在Student控制器里增加一个test3方法,配置路由Route::get('test3',['uses'=>'StudentController@test3']);

public function test3(){// all()方法查询所有数据$studnets=Student::all();
dd($studnets);//find()查询一条,依据主键查询。findOrFail()查找不存在的记录时会抛出异常
$student=Student::find(5);  //主键为5的记录
var_dump($student[&#39;attributes&#39;]);//查询构造器的使用,省略了指定表名
$student=Student::get();  
var_dump($student);
}
登录后复制

2 . 新增数据、自定义时间戳、批量赋值

(1)使用save方法新增

laravel会默认维护created_at,updated_at 两个字段,这两个字段都是存储时间戳,整型11位的,因此使用时需要在数据库添加这两个字段。如果不需要这个功能,只需要在模型里加一个属性:public $timestamps=false; 以及一个方法,可以将当前时间戳存到数据库

    protected function getDateFormat(){    
    return time();
    }
登录后复制

这样就不需要那两个字段了。

控制器里写:

    $student=new Student();    //设定数据
    $student->vip_name=&#39;xiaoming&#39;;
    $student->vip_type=&#39;出行&#39;;
    $student->vip_fenshu=900;
    $bool=$student->save(); //保存
    echo $bool;
登录后复制

从数据库里取得某条记录的时间戳时,默认取得的是按日期格式化好的时间戳,如果想取得原本的时间戳,则在模型里增加asDateTime方法。

    protected function asDateTime($val){    
    return $val;
    }
登录后复制

(2)使用create方法新增时,需要在模型里增加:

protected $fillable=[&#39;vip_name&#39;,&#39;vip_fenshu&#39;,&#39;vip_type&#39;];   //允许批量赋值的字段
登录后复制

控制器里写:

Student::create([&#39;vip_name&#39;=>&#39;mmm&#39;,&#39;vip_fenshu&#39;=>999,&#39;vip_type&#39;=>&#39;出行&#39;]);
登录后复制

这样即可新增成功!

(3)firstOrCreate()以属性查找记录,若没有则新增

    $student=Student::firstOrCreate([&#39;vip_name&#39;=>&#39;mmm&#39;]);
    echo $student;
登录后复制

(4)firstOrNew()以属性查找记录,若没有则会创建新的实例。若需要保存,则自己调用save方法()

    $student=Student::firstOrNew([&#39;vip_name&#39;=>&#39;mmm&#39;]);
    $student->save();
    echo $student;
登录后复制

3. 修改数据

    //通过模型更新数据
    $student=Student::find(2);
    $student->vip_fenshu=10000;
    $student->save(); //返回bool值
    //通过查询构造器更新
    $num=Student::where(&#39;vip_ID&#39;,&#39;>&#39;,2)->update([&#39;vip_fenshu&#39;=>2000]);
    echo $num; //返回更新的行数
登录后复制

4. 删除数据

    //(1)通过模型删除数据
    $student=Student::find(11);
    $student->delete(); //返回bool值
    //(2)通过主键删除
    $num=Student::destroy(10); //删除主键为10的一条记录
    echo $num; //返回删除的行数
    $num=Student::destroy(10,5); //删除多条 或者$num=Student::destroy([10,5]);
    echo $num; //返回删除的行数
登录后复制

 相关推荐:

Laravel框架数据库CURD操作、连贯操作使用方法

Laravel教程之基础入门和如何操作数据库

以上是Laravel如何操作数据库?Laravel数据库操作的三种方式(代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何用PHP的cURL库发送包含JSON数据的POST请求? 如何用PHP的cURL库发送包含JSON数据的POST请求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

See all articles