【老姐学PHP】PHP框架lavarel之数据库访问

目录

1.简介

2.测试环境准备

2.1 phpstudy

2.2 php

2.3 laravel框架

2.4 数据库

3.原生的 SQL 查询

3.1 新建文件UserController.php

3.2 修改文件api.php

3.3 浏览器测试

4. 流畅的查询构造器

4.1 从一个数据表中获取所有行

4.2 从数据表中获取单行或单列

4.3 获取一列的值

4.4 判断记录是否存在

5. Eloquent ORM

5.1 新建模型文件User2.php

5.2 修改控制器文件UserController.php

5.3 修改路由文件api.php

5.4 浏览器测试

后续


1.简介

Laravel 支持原生的 SQL 查询、流畅的查询构造器 和 Eloquent ORM等三种方式。

目前 Laravel 支持以下四种数据库:

  • MySQL 5.6+
  • PostgreSQL 9.4+
  • SQLite 3.8.8+
  • SQL Server 2017+

2.测试环境准备

2.1 phpstudy

这里使用的是最新的phpstudy8.1。

2.2 php

使用phpstudy默认开启的php7.3.4nts版本。

(1)TS(Thread-Safety):即线程安全,多线程访问时,采用了加锁机制,PHP以 ISAPI 方式(Apache 常用方式)加载的时候选择TS版本。

(2)NTS(None-Thread Safe):即非线程安全,不提供数据访问保护,一般操作的执行时间要比 TS 短。PHP以FAST-CGI方式加载运行的时候选择TNS版,具有更好的性能;

(3)ISAPI(Internet Server Application Programming Interface):通常是指被http服务器所加载,以服务器的模块形式运行。

(4)CGI(Common Gateway Interface):HTTP服务器与客户端机器上的程序进行“交谈”的一种工具。此时的php是作为一个独立的程序运行的,特点就是耗费内存。

(5)FAST-CGI:是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一个新进程。FAST-CGI 较CGI 减少了进程的重复创建的资源占用。

2.3 laravel框架

使用最新的laravel8.x框架。它的安装和配置请查看本人另外两篇博客文章:

【老姐学PHP】PHP框架lavarel之环境搭建_语冰的老夏虫的博客-CSDN博客

【老姐学PHP】PHP框架lavarel之api接口_语冰的老夏虫的博客-CSDN博客

2.4 数据库

这里测试使用数据库mysql5.6。

(1)新建数据库

创建数据表“px_user_score_log” 的sql语句如下:

#
# Structure for table "px_user_score_log"
#

DROP TABLE IF EXISTS `px_user_score_log`;
CREATE TABLE `px_user_score_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户 id',
  `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `action` varchar(50) NOT NULL DEFAULT '' COMMENT '用户操作名称',
  `score` int(11) NOT NULL DEFAULT '0' COMMENT '更改积分,可以为负',
  `coin` int(11) NOT NULL DEFAULT '0' COMMENT '更改金币,可以为负',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4 COMMENT='用户操作积分等奖励日志表';

#
# Data for table "px_user_score_log"
#

INSERT INTO `px_user_score_log` VALUES (1,4,1615344758,'login',1,1),(2,4,1615366463,'login',1,1),(3,4,1615429715,'login',1,1),(4,4,1616466886,'login',1,1),(6,4,1616743251,'login',1,1),(7,4,1617005416,'login',1,1),(8,4,1617010474,'login',1,1),(9,4,1617158613,'login',1,1),(10,4,1617346752,'login',1,1),(56,1000,1111111,'test1',66,2),(57,1000,1111111,'test1',66,2),(58,1000,1111111,'test1',66,2),(59,1000,1111111,'test1',66,2),(60,2000,22222,'test2',34,3),(61,2001,22221,'test2_1',12,3),(62,2001,22221,'test2_1',12,3),(63,2001,22221,'test2_1',12,3),(64,2001,22221,'test2_1',12,3);

(2)修改文件.env

laravel数据库连接主要需要进行修改的配置文件是.env , 和config文件夹下的database.php。如果只有.env.example文件,将.env.example复制一份命名成.env就可以了。 

如果配置文件config\database.php的配置项使用了env函数,那么如果.env文件中配置了该选项,则使用.env文件里的值,否则使用配置文件设置的默认值。

一般修改.env文件不会立即有效,必须重启网站服务或执行php artisan serve才会有效。

3.原生的 SQL 查询

一旦配置好数据库连接后,便可以使用 DB facade 门面运行查询。DB facade 为每种类型的查询提供了相应的方法:select,update,insert,delete 和 statement。

3.1 新建文件UserController.php

执行在命令行中执行如下代码,自动生成控制器的类文件。

// 创建控制器
php artisan make:controller UserController
 
// 或创建Rest风格资源控制器(带有index、create、store、edit、update、destroy、show方法)
php artisan make:controller UserController --resource

注意:通过如下的命令,可以创建模型的时候同时生成新建表的迁移+控制器+路由。

php artisan make:model Order -m -c -r

 上面自动生成的文件保存至文件夹:D:\Microsoft\phpstudy_pro\WWW3\blog\app\Http\Controllers

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class UserController extends Controller
{
    //
}

 添加自己的数据库操作的逻辑代码如下: 

<?php   
namespace App\Http\Controllers;  
use Illuminate\Support\Facades\DB;  

class UserController extends Controller {  

    public function query()  
    {  
        $student=DB::select("select * from px_user_score_log where id < 10");  
        //var_dump($student);  
        //dd()是laravel提供的方法,可以将一个数组以节点树的形式展示出来。  
        //dd($student);

        $json = json_encode(array(
            "result"=>200,
            "message"=>"登录成功!",
            "data"=>$student
        ),JSON_UNESCAPED_UNICODE);
        echo($json);
    } 

    public function add()  
    {  
        $bool=DB::insert("insert into px_user_score_log(user_id,create_time,action,score,coin)   
            values(?,?,?,?,?)",[1000,1111111,'test1',66,2]);  
        var_dump($bool);
    } 

    public function delete($id)  
    {  
        $num=DB::delete('delete from px_user_score_log where id= ?',[$id]); 
        echo $num;  
    } 

    public function update()  
    {  
        $bool=DB::update('update px_user_score_log set score= ? where id= ? ',[78,55]);  
        echo $bool;
    } 

}  

3.2 修改文件api.php

D:\Microsoft\phpstudy_pro\WWW3\blog\routes

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::group(['prefix'=>"users"],function() {
//Route::prefix('users')->group(function () {
    Route::get('query',  [UserController::class,'query']);
    Route::get('add',    [UserController::class,'add']);
    Route::get('delete/{id}', [UserController::class,'delete']);
    Route::get('update', [UserController::class,'update']);
});

3.3 浏览器测试

http://localhost/api/users/query

4. 流畅的查询构造器

Laravel 的查询构造器使用 PDO 参数绑定的形式,保护您的应用程序免受 SQL 注入攻击。因此不必清理因参数绑定而传入的字符串。

4.1 从一个数据表中获取所有行

    public function getAll3()
    {
        $users = DB::table('px_user_score_log')->get();

        //return view('user.index', ['users' => $users]);
		foreach ($users as $user) {
			echo $user->id;
			echo ",";
		}		
		return $users;
    }

4.2 从数据表中获取单行或单列

    public function getSingleRow3()
    {
		$user = DB::table('px_user_score_log')->where('user_id', '4')->first();

		return $user;
    }

4.3 获取一列的值

    public function getSingleColumn3()
    {
		$titles = DB::table('px_user_score_log')->pluck('action');

		foreach ($titles as $title) {
			echo $title;
			echo ",";
		}
	}

4.4 判断记录是否存在

    public function exists()
    {
		return DB::table('px_user_score_log')->where('user_id', 1000)->exists();
	}

5. Eloquent ORM

Laravel 自带的 Eloquent ORM 为您的数据库提供了一个优雅的、简单的 ActiveRecord 实现。每一个数据库的表有一个对应的 "Model" 用来与这张表交互。

Eloquent ORM - Laravel - 为 WEB 艺术家创造的 PHP 框架。

5.1 新建模型文件User2.php

执行在命令行中执行如下代码,自动生成模型的类文件User2.php。

php artisan make:model User2

上面自动生成的文件保存至文件夹:D:\Microsoft\phpstudy_pro\WWW3\blog\app\Models,

<?php

namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User2 extends Model
{
    use HasFactory;
}

添加自己的代码,修改如下:

<?php  
namespace App\Models;  
use Illuminate\Database\Eloquent\Model;  

class User2 extends Model{  
    //指定表名  
    protected $table = 'px_user_score_log';  
    //指定主键  
    protected $primaryKey = 'id';  
    //laravel会默认维护created_at,updated_at两个字段
    public $timestamps = false; 
    //create方法新增
    protected $fillable=['user_id','create_time','action','score','coin'];

    public function getDateFormat()
    {
        return time();
    }
} 

5.2 修改控制器文件UserController.php

 D:\Microsoft\phpstudy_pro\WWW3\blog\app\Http\Controllers

<?php   
namespace App\Http\Controllers;  
use Illuminate\Support\Facades\DB;  
use App\Models\User2;

class UserController extends Controller {  

    //Eloquent ORM 结构生成器
    public function query2(){  
        // 1、查询所有数据  
        $users=User2::all();  
        //dd($users);  

        // 2、查询一条,依据主键查询。findOrFail()查找不存在的记录时会抛出异常  
        //$users=User2::find(6);  //id=6  
        //var_dump($users['attributes']);  

        // 3、查询构造器的使用,省略了指定表名  
        //$users=User2::get();    
        //var_dump($users);  

        return $users;
    }

    public function add2()  
    {  
        /*$users = new User2(); 
        $users->user_id=2000;  
        $users->create_time=22222;  
        $users->action='test2'; 
        $users->score=34;  
        $users->coin=3;   
        $bool=$users->save();  //保存  
        echo $bool;*/

        User2::create(['user_id'=>2001,'create_time'=>22221,'action'=>'test2_1','score'=>12,'coin'=>3]);
    } 
}  

5.3 修改路由文件api.php

 D:\Microsoft\phpstudy_pro\WWW3\blog\routes

use App\Http\Controllers\UserController;

Route::group(['prefix'=>"users"],function() {

    Route::get('query2',  [UserController::class,'query2']);
    Route::get('add2',  [UserController::class,'add2']);
});

5.4 浏览器测试

http://localhost/api/users/query2

当前也可以通过第三方工具postman进行测试。

后续

如果你觉得该方法或代码有一点点用处,可以给作者点个赞;╮( ̄▽ ̄)╭
如果你感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进。o_O???
谢谢各位童鞋们啦( ´ ▽ ` )ノ ( ´ ▽ ` )っ!!!

猜你喜欢

转载自blog.csdn.net/hhy321/article/details/120619466