laravel 5连接MySQL_Laravel 连接数据库、操作数据库的三种方式

本文介绍了Laravel 5中使用DB facade和Eloquent ORM进行数据库连接、CRUD操作的方法,包括配置数据库连接、使用DB facade实现增删改查、查询构造器操作、Eloquent ORM的模型建立与查询、数据的新增、修改和删除等。详细阐述了各种操作的语法和示例。
摘要由CSDN通过智能技术生成

laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式

1、连接数据库

.env 数据库配置

DB_HOST=localhost dbhost

DB_DATABASE=laravel dbname

DB_USERNAME=root username

DB_PASSWORD=root password

2、使用DB facade实现CURD

(1) 新建路由

Route::get('city', 'cityController@index');

(2) 新建控制器,直接在控制器里面查询

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

class CityController extends Controller {

public function index() {

$insert = DB::insert('insert into city set name="安徽",state="init"');

增:返回bool

$delete = DB::delete('delete from city where id > 5');

删:返回删除的行数

$update = DB::update('update city set name = "上海" where id = 8');

改:返回更新的行数

$city = DB::select('select * from city');

查:返回数组

}

}

3、使用查询构造器实现CURD

(1)增:

$insert_bool = DB::table('city')->insert(['name' => '湖南', 'state' => 'init']);

插入一条数据返回bool值

$insert_id = DB::table('city')->insertGetId(['name' => '湖北', 'state' => 'init']);

插入一条数据返回插入的记录id

$insert_bool = DB::table('city')->insert([['name' => '北京', 'state' => 'init'], ['name' => '上海', 'state' => 'init']]);

插入多条数据返回bool值

(2)删:

$delete_row = DB::table('city')->where('id', 14)->delete();

删除一条记录,返回受影响的行数,1行

$delete_table = DB::table('city')->truncate();

清空一张表,不返回任何标示

(3)改:

$update_row = DB::table('city')->where('id', 20)->update(['name' => '日本']);

更新一条数据返回受影响的行数,1行

$update_row = DB::table('carousel')->increment('order_number');

让所有记录的order_number都自增1,返回受影响的行数,6行

$update_row = DB::table('carousel')->decrement('order_number');

让所有记录的order_number都自减1,返回受影响的行数,6行

$update_row = DB::table('carousel')->increment('order_number', 100);

让所有记录的order_number都自增100,返回受影响的行数,6行

$update_row = DB::table('carousel')->decrement('order_number', 100);

让所有记录的order_number都自减100,返回受影响的行数,6行

$update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200);

修改一条记录id为1的order_number字段自增200,返回受影响的行数,1行

$update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200, ['name' => '自增同时修改字段']);

修改一条记录id为1的order_number字段自增200,同时去修改其他字段,返回受影响的行数,1行

(4)查:

$select_rows = DB::table('city')->get();

get方法查询所有记录

$first_row = DB::table('carousel')->orderBy('id', 'asc')->first();

first方法查询排序后的第一条

$select_rows = DB::table('carousel')->where('id', '>=', 2)->get();

where方法查询符合单个条件的所有记录

$select_rows = DB::table('carousel')->whereRaw('id >= ? and order_number > ?', [1, 5])->get();

whereRaw方法查询符合多个条件的所有记录

$select_field = DB::table('carousel')->pluck('name');

pluck方法查询符合条件的每条记录的name字段

$select_field = DB::table('carousel')->lists('name');

$select_field = DB::table('carousel')->lists('name', 'id_code');

lists方法查询符合条件的每条记录的name字段(或者查询符合条件的每条记录的name字段以id_code为键名)

$select_field = DB::table('carousel')->select('id','id_code','name')->get();

select方法查询符合条件的每条记录的指定字段

DB::table('user_log')->chunk(10, function($number){

var_dump($number);

if(???) return false;

});

chunk方法根据条件每次查询固定的记录,同时内部的回调函数可以控制流程,当满足某个条件的时候可以return false

dd($select_field);

(5)聚合函数:

$count = DB::table('city')->count();

统计总的记录数

$max = DB::table('user_log')->max('id');

求最大值

$min = DB::table('user_log')->min('id');

求最小值

$avg = DB::table('user_log')->avg('id');

求平均值

$sum = DB::table('user_log')->sum('user_id');

求和

dd($sum);

4、使用Eloquent ORM实现CURD

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

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

路由:

Route::any('orm1', ['uses' => 'CityController@orm1']);

控制器:

namespace App\Http\Controllers;

use App\City;

class CityController extends Controller

{

public function orm1()

{

(1)all方法查询所有的记录

$city = City::all();

(2)find方法根据主键id查询单条记录

$city = City::find(1);

(3)findOrFail方法根据主键id查询单条记录,如果查询失败则报异常

$city = City::findOrFail(1);

(4)get方法查询所有记录

$city = City::get();

(5)first方法查询第一条记录

$city = City::where('id', '>', 1)->orderBy('id', 'desc')->first();

(6)chunk方法每次查询固定条数记录出来

City::chunk(1, function ($number) {

var_dump($number);

});

(7)count()方法求记录总条数

$count = City::count();

(8)max()方法求最大值

$max = City::where('id', '>', 1)->max('parent_id');;

}

}

模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model

{

protected $table = 'city'; // 指定表名 与 模型关联起来

protected $primaryKey = 'id'; // 指定主键,默认是id可以不写

}

2) 新增数据,自定义时间戳和批量赋值的使用:

路由:

Route::any('orm1', ['uses' => 'CityController@orm1']);

控制器:

namespace App\Http\Controllers;

use App\City;

class CityController extends Controller

{

public function orm1()

{

// 新增数据,保存数据

$city = new City();

$city->name = '123456';

$city->state = 'init';

$bool = $city->save();

dd($bool);

// 使用模型的create方法新增数据

$city = City::create(['name' => '南通', 'state' => 'init']);

dd($city);

// 以属性去查询数据,如果没有的话就去创建

$city = City::firstOrCreate(['name' => '南通']);

// 以属性去查询数据,如果没有的话就去创建,但是需要使用save保存下来

$city = City::firstOrNew(['name' => '南通ssss']);

$city->save();

dd($city);

}

}

模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model

{

protected $table = 'city'; // 指定表名 与 模型关联起来

protected $primaryKey = 'id'; // 指定主键,默认是id可以不写

public $timestamps = false; // 关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

protected function getDateFormat() // 此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式

{

return time();

}

protected function asDateTime($value) // 取出来的时间不要格式化

{

return $value;

}

}

3) 使用Eloquent ORM修改数据:

路由:

Route::any('orm1', ['uses' => 'CityController@orm1']);

控制器:

namespace App\Http\Controllers;

use App\City;

class CityController extends Controller

{

public function orm1()

{

//通过模型更新数据

$city = City::find(9);

$city->name = '苏州';

$bool = $city->save();

var_dump($bool);

//批量更新数据,返回更新后的条数

$update_rows = City::where('id', '>', 2)->update(['parent_id' => 10]);

var_dump($update_rows);

}

}

模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model

{

protected $table = 'city'; // 指定表名 与 模型关联起来

protected $primaryKey = 'id'; // 指定主键,默认是id可以不写

public $timestamps = false; // 关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

protected function getDateFormat() // 此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式

{

return time();

}

protected function asDateTime($value) // 取出来的时间不要格式化

{

return $value;

}

}

4) 使用Eloquent ORM删除数据:

路由:

Route::any('orm1', ['uses' => 'CityController@orm1']);

控制器:

namespace App\Http\Controllers;

use App\City;

class CityController extends Controller

{

public function orm1()

{

//通过模型删除

$city = City::find(9);

$bool = $city->delete();

var_dump($bool);

//通过主键删除,返回删除的条数

$delete_rows = City::destroy(8);

$delete_rows = City::destroy(6, 7);

$delete_rows = City::destroy([6, 7]);

var_dump($delete_rows);

//通过指定条件删除,返回删除的条数

$delete_rows = City::where('id', '>', 2)->delete();

var_dump($delete_rows);

}

}

模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model

{

protected $table = 'city'; // 指定表名 与 模型关联起来

protected $primaryKey = 'id'; // 指定主键,默认是id可以不写

public $timestamps = false; // 关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)

protected function getDateFormat() // 此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式

{

return time();

}

protected function asDateTime($value) // 取出来的时间不要格式化

{

return $value;

}

}

5) 多数据库连接:

.env文件配置如下:

DB_HOST=127.0.0.1

DB_DATABASE=dearedu

DB_USERNAME=root

DB_PASSWORD=root

DB_HOST_DEAREDU_MY=127.0.0.1

DB_PORT_DEAREDU_MY=3306

DB_DATABASE_DEAREDU_MY=dearedu_my

DB_USERNAME_DEAREDU_MY=root

DB_PASSWORD_DEAREDU_MY=root

config\database.php文件配置如下:

'mysql' => [

'driver' => 'mysql',

'host' => env('DB_HOST', 'forge'),

'database' => env('DB_DATABASE', 'forge'),

'username' => env('DB_USERNAME', 'forge'),

'password' => env('DB_PASSWORD', 'forge'),

'charset' => 'utf8',

'collation' => 'utf8_unicode_ci',

'prefix' => '',

'strict' => false,

],

'mysql_dearedu_my' => [

'driver' => 'mysql',

'host' => env('DB_HOST_DEAREDU_MY', 'forge'),

'port' => env('DB_PORT_DEAREDU_MY', '3306'),

'database' => env('DB_DATABASE_DEAREDU_MY', 'forge'),

'username' => env('DB_USERNAME_DEAREDU_MY', 'forge'),

'password' => env('DB_PASSWORD_DEAREDU_MY', 'forge'),

'charset' => 'utf8',

'collation' => 'utf8_unicode_ci',

'prefix' => '',

'strict' => false,

'engine' => null,

],

app\Http\Controllers\MemberController.php文件配置如下:

namespace App\Http\Controllers;

use App\Member;

class MemberController extends Controller

{

public function index()

{

$members = Member::getMember();

}

}

app\Member.php文件配置如下:

namespace App;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Support\Facades\DB;

class Member extends Model

{

public static function getMember()

{

return DB::select("select mid from cms_member");

}

}

app\Http\Controllers\IndexController.php文件配置如下:

namespace App\Http\Controllers;

use App\Unit;

class IndexController extends Controller

{

public function index()

{

$units = Unit::getUnit();

}

}

app\Unit.php文件配置如下:

namespace App;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Support\Facades\DB;

class Unit extends Model

{

public static function getUnit()

{

return DB::connection('mysql_dearedu_my')->select("select id from my_config_unit limit 5");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值