Wie betreibt Laravel die Datenbank? Drei Möglichkeiten zum Betrieb der Laravel-Datenbank (Code)

不言
Freigeben: 2023-04-03 12:30:02
Original
6536 Leute haben es durchsucht

Laravel ist ein PHP-Webentwicklungsframework (PHP Web Framework). Es kann Sie von unordentlichen Codes befreien; es kann Ihnen helfen, eine perfekte Netzwerk-APP zu erstellen, und jede Codezeile kann prägnant und ausdrucksstark sein. Wie betreibt das Laravel-Framework die Datenbank? Bitte schauen Sie sich die konkreten Inhalte an.

Laravel bietet drei Möglichkeiten, die Datenbank zu betreiben: DB-Fassade (ursprüngliche Methode), Abfrage-Builder und Eloquent ORM.

Die Datenbankkonfigurationsdatei befindet sich in „database.php“ im Konfigurationsverzeichnis. Öffnen Sie diese Datei und suchen Sie die MySQL-Konfigurationselemente.


Hier gibt es eine Umgebung, die eigentlich Laravel The nennt .env-Datei im Stammverzeichnis. In dieser Datei werden Konfigurationsinformationen der Laravel-Datenbank gespeichert. Öffne es. Ändern Sie es einfach in die Datenbankinformationen des Projekts.


Bitte erstellen Sie selbst eine Datenbank, die vipinfo enthalten muss Tabelle und fügen Sie unten einige Daten zur einfacheren Verwendung ein. Der Aufbau der Tabelle ist wie folgt.

Wie der Name schon sagt: Diese Tabelle ist eine Mitgliedschaftstabelle mit Mitglieds-ID (Primärschlüssel), Mitgliedsname, und Mitgliedstyp. Mitgliedspunkte und andere Felder.

1. DB-Fassade für Datenbankoperationen

In App->Http->Controllern Erstellen Sie im Verzeichnis einen neuen Student Controller, StudentController.php. Der StudentController.php-Code lautet wie folgt:

<?php 
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;class StudentController extends Controller {
 
}
Nach dem Login kopieren

1 .laravel-Datenbankabfrage

Fügen Sie eine test1-Methode im Student-Controller hinzu. Die Abfrage verwendet die statische Methode select() der DB-Klasse und die Parameter Sind native SQL-Anweisungen und geben ein zweidimensionales Array zurück. dd() ist eine von Laravel bereitgestellte Methode, die ein Array in Form eines Knotenbaums anzeigen kann. Der spezifische Code lautet wie folgt:

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

Routing-Konfiguration: Route::get('test1',['uses'=> ;'StudentController @test1']);

URL-Zugriff: http://localhost/laravel/public/index.php/test1 , druckt das Ergebnis aus.

2. Neuer Betrieb

Es wird die neue statische Methode insert() der DB-Klasse verwendet. Der erste Parameter ist die SQL-Anweisung und der zweite Parameter ist ein Array, in dem die einzufügenden Daten platziert werden . Hier? Es handelt sich um einen Platzhalter, der die SQL-Injection über die Datenbankschnittstellenschicht pdo verhindert. Was zurückgegeben wird, ist das Ergebnis der Ausführung. Gibt true zurück, wenn die Einfügung erfolgreich war, andernfalls false.

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

3. Aktualisierungsvorgang

Das Update verwendet die statische Methode update() der DB-Klasse. Der erste Parameter ist die SQL-Anweisung und der zweite Parameter ist ein Array array Die Elemente entsprechen jeweils den Fragezeichen in der SQL-Anweisung. Gibt true zurück, wenn das Update erfolgreich ist.

    $bool=DB::update(&#39;update vipinfo set vip_fenshu= ? where vip_ID= ? &#39;,[700,5]);
    var_dump($bool);  //更新成功返回true
Nach dem Login kopieren

4. Vorgang löschen

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

    $num=DB::delete(&#39;delete from vipinfo where vip_ID= ?&#39;,[5]);
    echo $num;
Nach dem Login kopieren

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

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值
Nach dem Login kopieren

(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
Nach dem Login kopieren

(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();//删除整表,不能恢复,谨慎使用
Nach dem Login kopieren

(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就不会再往下查了
});
Nach dem Login kopieren

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;
Nach dem Login kopieren

四、数据库操作之 - 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;;
}
Nach dem Login kopieren

在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);
}
Nach dem Login kopieren

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

(1)使用save方法新增

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

    protected function getDateFormat(){    
    return time();
    }
Nach dem Login kopieren

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

控制器里写:

    $student=new Student();    //设定数据
    $student->vip_name=&#39;xiaoming&#39;;
    $student->vip_type=&#39;出行&#39;;
    $student->vip_fenshu=900;
    $bool=$student->save(); //保存
    echo $bool;
Nach dem Login kopieren

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

    protected function asDateTime($val){    
    return $val;
    }
Nach dem Login kopieren

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

protected $fillable=[&#39;vip_name&#39;,&#39;vip_fenshu&#39;,&#39;vip_type&#39;];   //允许批量赋值的字段
Nach dem Login kopieren

控制器里写:

Student::create([&#39;vip_name&#39;=>&#39;mmm&#39;,&#39;vip_fenshu&#39;=>999,&#39;vip_type&#39;=>&#39;出行&#39;]);
Nach dem Login kopieren

这样即可新增成功!

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

    $student=Student::firstOrCreate([&#39;vip_name&#39;=>&#39;mmm&#39;]);
    echo $student;
Nach dem Login kopieren

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

    $student=Student::firstOrNew([&#39;vip_name&#39;=>&#39;mmm&#39;]);
    $student->save();
    echo $student;
Nach dem Login kopieren

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; //返回更新的行数
Nach dem Login kopieren

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; //返回删除的行数
Nach dem Login kopieren

 相关推荐:

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

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

Das obige ist der detaillierte Inhalt vonWie betreibt Laravel die Datenbank? Drei Möglichkeiten zum Betrieb der Laravel-Datenbank (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!