laravel记录笔记Laravel 连接数据库、操作数据库的三种方式
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");
}
}
laravel记录笔记Laravel 连接数据库、操作数据库的三种方式的更多相关文章
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- Android开发之使用sqlite3工具操作数据库的两种方式
使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...
- Yii框架操作数据库的几种方式与mysql_escape_string
一.Yii操作数据库的几种选择 1,PDO方式. $sql = "";//原生态sql语句 xx::model()->dbConnection->createComma ...
- Code First03---CodeFirst根据配置同步到数据库的三种方式
上一节我们说到使用Fluent API对实体的配置,但是有一个问题了,在业务中我们可以用到的实体很多,那是不是每个都需要这样去配置,这样就造成我们重写的OnModelCreating方法很庞大了.所以 ...
- Django框架操作数据库的两种方式
Django操作数据库的前提操作是成功连接数据库,详情见上篇:https://www.cnblogs.com/kristin/p/10791358.html Django查询数据库的方式一 from ...
- C# 操作数据库的几种方式(数据库使用SQL SERVER2008)
一:通过常规 T-SQL 语句 (只写删除操作,其他同理) string strConn = ConfigurationManager.ConnectionStrings["SiteConn ...
- mybatis框架-SqlSession会话操作数据库的两种方式
1.通过SqlSession实力来直接执行已经映射的sql语句 例如,查询整个用户表中的信息 在UserMapper.xml中编写sql语句 编写测试方法: 注意:这里使用的selectList方法: ...
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案. P ...
- php连接MySQL数据库的三种方式(mysql/mysqli/pdo)
引言 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案 ...
随机推荐
- 【转】.NET NPOI操作Excel常用函数
最近因项目接触了NPOI,感觉还是蛮不错的,网络上的教程普遍版本较老,本篇记录所常用操作,采用NPOI 2.0版本. 推荐: NPOI官方网站 NPOI 1.2.4/1.2.5 官方教程 新建Exce ...
- JS DOM操作(五) Window.docunment对象——操作元素
定位: var a = document.getElementByIt( "id" ) 同辈元素 var b = a.nextSibling; -- 找 a ...
- 关于 luv_letters
luv_letters是一枚现高二文化课菜鸡,是一枚临汾一中联赛oier(我太菜了),也是一名Cher. (好像没有好的地方 真名不提跟某个当红女明星一样(正经汉子不女装 话说当初选择竞赛科目的时候( ...
- [android] 轮播图-滑动图片标题焦点
谷歌提供的v4包,ViewPager 在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域 在布局文件中,布置标题描述部分 ...
- Java基础——Servlet(三)
还在学习Servlet,觉得这里的知识点蛮多的.还要继续努力,加油. 拿韩老师的话激励一下自己,共勉.韩老师说,“成功其实也不难,只要树立一个目标,不需要你是一个很强的人,不需要你很高智商,不需要你是 ...
- 【Java基础】6、java中使用switch-case的用法及注意事项超全总结
1.switch-case注意事项: switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte.short.int.char.还有枚举:需要强调的是:long和Strin ...
- 【C#数据结构系列】查找
一:查找 1.1 基本概念和术语 查找(Search)是在数据结构中确定是否存在关键码等于给定关键码的记录的过程.关键码有主关键码和次关键码.主关键码能够唯一区分各个不同的记录,次关键码通常不能唯一区 ...
- Java - "JUC" CyclicBarrier源码分析
Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 CyclicBarrier简介 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 ...
- CSS笔记——属性选择器
1.存在和值(Presence and value)属性选择器这些属性选择器尝试匹配精确的属性值:[attr]:该选择器选择包含 attr 属性的所有元素,不论 attr 的值为何.[attr=val ...
- 说说gogoTester-nodejs 的实现
一直在使用goagent,所以对于查找google可用ip有了很大的兴趣,在github上面发现有一个项目是gogoTester,是用来查找google ip的,于是突发奇想自己用nodejs写了一个 ...