问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Laravel中的数据库迁移是怎么回事??

发布网友 发布时间:2022-04-09 23:36

我来回答

2个回答

懂视网 时间:2022-04-10 03:58

一.基本
1.配置文件:config/database.php

2.运行原生的sql查询
$users = DB::select(‘select * from users where active = ?‘, [1]);
$results = DB::select(‘select * from users where id = :id‘, [‘id‘ => 1]);

3.insert
DB::insert(‘insert into users (id, name) values (?, ?)‘, [1, ‘Dayle‘]);

4.update
$affected = DB::update(‘update users set votes = 100 where name = ?‘, [‘John‘]);

5.delete
$deleted = DB::delete(‘delete from users‘);

6.通用查询,不返回结果的一些查询,比如删除表
DB::statement(‘drop table users‘);

二.监听查询事件
class AppServiceProvider extends ServiceProvider{
	/**
	* 启动所有应用服务
	*
	* @return void
	*/
	public function boot()
	{
		DB::listen(function($sql, $bindings, $time) {
		//
		});
	}
	....
}

三.事务
1.自动
DB::transaction(function () {
	DB::table(‘users‘)->update([‘votes‘ => 1]);
	DB::table(‘posts‘)->delete();
});

如果闭包函数中执行出错,事务回滚

2.手动
DB::beginTransaction()
DB::rollBack();
DB::commit();

四.多数据库连接
传递给connection 方法的连接名对应配置文件config/database.php 中相应的连接
$users = DB::connection(‘foo‘)->select(...);

$pdo = DB::connection()->getPdo();
获取底层原生的pdo实例

五.查询

1.查询结果集(如果在配置文件中指定了表前缀,table方法中的表名可以不用带表前缀)
a.获取所有记录,table,get
$users = DB::table(‘users‘)->get();

b.取出一行,first
$users = DB::table(‘users‘)->first();

c.获取部分结果,chunk
DB::table(‘users‘)->chunk(100, function($users) {
	foreach ($users as $user) {
		//
	}
});

返回 false 来中止组块的运行
DB::table(‘users‘)->chunk(100, function($users) {
	// 处理结果集...
	return false;
});

d.获取列值列表,lists
$titles = DB::table(‘roles‘)->lists(‘title‘);
foreach ($titles as $title) {
	echo $title;
}

指定键
// 返回一个数组,name字段作为key,title字段作为value
$roles = DB::table(‘roles‘)->lists(‘title‘, ‘name‘);
foreach ($roles as $name => $title) {
	echo $title;
}

2.聚合函数
$users = DB::table(‘users‘)->count();
$price = DB::table(‘orders‘)->max(‘price‘);
$price = DB::table(‘orders‘)->where(‘finalized‘, 1)->avg(‘price‘);


3.指定字段
$users = DB::table(‘users‘)->select(‘name‘, ‘email as user_email‘)->get();

4.不重复结果
$users = DB::table(‘users‘)->distinct()->get();

5.如果你已经有了一个查询构建器实例并且希望添加一个查询列到已存在的 select 子句,可以使用addSelect方法
$query = DB::table(‘users‘)->select(‘name‘);
$users = $query->addSelect(‘age‘)->get();

6.原生语句
$users = DB::table(‘users‘)
->select(DB::raw(‘count(*) as user_count, status‘))
->where(‘status‘, ‘<>‘, 1)
->groupBy(‘status‘)
->get();


六.连接

1.内连接
$users = DB::table(‘users‘)
->join(‘contacts‘, ‘users.id‘, ‘=‘, ‘contacts.user_id‘)
->join(‘orders‘, ‘users.id‘, ‘=‘, ‘orders.user_id‘)
->select(‘users.*‘, ‘contacts.phone‘, ‘orders.price‘)
->get();

2.左连接
$users = DB::table(‘users‘)
->leftJoin(‘posts‘, ‘users.id‘, ‘=‘, ‘posts.user_id‘)
->get();

3.高级连接语句
DB::table(‘users‘)->join(‘contacts‘, function ($join) {
	$join->on(‘users.id‘, ‘=‘, ‘contacts.user_id‘)->orOn(...);
})->get();

可以使用where风格的子句
DB::table(‘users‘)->join(‘contacts‘, function ($join) {
	$join->on(‘users.id‘, ‘=‘, ‘contacts.user_id‘)->where(‘contacts.user_id‘, ‘>‘, 5);
})->get();

六,联合

$first = DB::table(‘users‘)->whereNull(‘first_name‘);
$users = DB::table(‘users‘)->whereNull(‘last_name‘)->union($first)->get();
unionAll 方法也是有效的,并且和union 有同样的使用方法。


七.where语句

1.$users = DB::table(‘users‘)->where(‘votes‘, ‘=‘, 100)->get();
如果是=,可以简写为$users = DB::table(‘users‘)->where(‘votes‘, 100)->get();
可以使用其它操作符来编写where 子句
$users = DB::table(‘users‘)
	->where(‘votes‘, ‘>=‘, 100)
	->get();

$users = DB::table(‘users‘)
	->where(‘votes‘, ‘<>‘, 100)
	->get();

$users = DB::table(‘users‘)
	->where(‘name‘, ‘like‘, ‘T%‘)
	->get();


2.or
$users = DB::table(‘users‘)
	->where(‘votes‘, ‘>‘, 100)
	->orWhere(‘name‘, ‘John‘)
	->get();

3.and
$users = DB::table(‘users‘)
	->where(‘votes‘, ‘>‘, 100)
	->where(‘name‘, ‘John‘)
	->get();

4.whereBetween/whereNotBetween

$users = DB::table(‘users‘)
	->whereBetween(‘votes‘, [1, 100])->get();
$users = DB::table(‘users‘)
	->whereNotBetween(‘votes‘, [1, 100])
	->get();

5.whereIn/whereNotIn
$users = DB::table(‘users‘)
	->whereIn(‘id‘, [1, 2, 3])
	->get();

$users = DB::table(‘users‘)
	->whereNotIn(‘id‘, [1, 2, 3])
	->get();

6.whereNull/whereNotNull
$users = DB::table(‘users‘)
	->whereNull(‘updated_at‘)
	->get();

$users = DB::table(‘users‘)
	->whereNotNull(‘updated_at‘)
	->get();

6.高级where

a.参数分组
DB::table(‘users‘)
	->where(‘name‘, ‘=‘, ‘John‘)
	->orWhere(function ($query) {
		$query->where(‘votes‘, ‘>‘, 100)->where(‘title‘, ‘<>‘, ‘Admin‘);
	})
->get();

等价于:select * from users where name = ‘John‘ or (votes > 100 and title <> ‘Admin‘)

b.exists 语句
DB::table(‘users‘)
	->whereExists(function ($query) {
	$query->select(DB::raw(1))
	->from(‘orders‘)
	->whereRaw(‘orders.user_id = users.id‘);
})
->get();

等价于:
select * from users
where exists (
select 1 from orders where orders.user_id = users.id
)

八.排序
1.orderBy
$users = DB::table(‘users‘)
	->orderBy(‘name‘, ‘desc‘)
	->get();

2.groupBy/having/havingRaw
$users = DB::table(‘users‘)
	->groupBy(‘account_id‘)
	->having(‘account_id‘, ‘>‘, 100)
->get();

havingRaw 方法可以用于设置原生字符串作为having 子句的值,例如,我们要找到所有售价大于$2500 的部分:
$users = DB::table(‘orders‘)
->select(‘department‘, DB::raw(‘SUM(price) as total_sales‘))
->groupBy(‘department‘)
->havingRaw(‘SUM(price) > 2500‘)
->get();

九,限定结果集(mysql的limit)
skip / take
$users = DB::table(‘users‘)->skip(10)->take(5)->get();


十,Insert
1.单条记录
DB::table(‘users‘)->insert(
[‘email‘ => ‘john@example.com‘, ‘votes‘ => 0]);

2.多条记录
DB::table(‘users‘)->insert([
[‘email‘ => ‘taylor@example.com‘, ‘votes‘ => 0],
[‘email‘ => ‘dayle@example.com‘, ‘votes‘ => 0]
]);

3.获取自增ID
根据之前的插入的列值来获取
$id = DB::table(‘users‘)->insertGetId(
[‘email‘ => ‘john@example.com‘, ‘votes‘ => 0]
);

十一.更新
1.普通
DB::table(‘users‘)
->where(‘id‘, 1)
->update([‘votes‘ => 1]);

2.增加/减少,默认步长为1
DB::table(‘users‘)->increment(‘votes‘);
DB::table(‘users‘)->increment(‘votes‘, 5);
DB::table(‘users‘)->decrement(‘votes‘);
DB::table(‘users‘)->decrement(‘votes‘, 5);

指定更新额外列
DB::table(‘users‘)->increment(‘votes‘, 1, [‘name‘ => ‘John‘]);


十二.删除
1.普通
DB::table(‘users‘)->delete()

2.where
DB::table(‘users‘)->where(‘votes‘, ‘<‘, 100)->delete();

3.清空表
DB::table(‘users‘)->truncate();


十三.悲观锁/乐观锁(配合事务)
DB::table(‘users‘)->where(‘votes‘, ‘>‘, 100)->sharedLock()->get();
DB::table(‘users‘)->where(‘votes‘, ‘>‘, 100)->lockForUpdate()->get();

  

Laravel之数据库

标签:des   指定   tac   使用方法   lock   public   文件   blog   func   

热心网友 时间:2022-04-10 01:06

Laravel鼓励敏捷、迭代的开发方式,我们没指望在第一次就获得所有正确的。相反,我们编写代码、测试和与我们的最终用户进行交互,并完善我们的理解。
对于工作,我们需要一个配套的实践集。我们使用像subversion、GIT或Mercurial这些版本控制工具来存储应用程序的源代码文件,使我们能够撤消错误和追踪开发过程中的改变。
但应用程序更改时,存在我们不能单独使用版本控制进行有效管理的区域。在我们的开发进度中,Laravel应用程序的数据库架构不断演变:我们在这里添加了一个表,在那里重命名列,删除索引等等。数据库的改变与应用程序代码步调一致。追问你这确定不是粘贴复制么。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果只有铬黑T试剂,能否测定钙离子,如何测定? 金银花茶的做法窍门 怎样制作金银花茶 怎么快速取消订单 有关"听"开头的成语 王卡看腾讯视频不显示免流 大王卡腾讯视频不显示免流 谁给推荐几部国产的好看的、卟幼稚的、新鲜的动画片 好看的、不幼稚的国产动画片有哪些? 太早的不要,要连续动画片 上传速度慢是什么原因? 电商算是什么意思 电商是什么啊? 水浒传天罡星和地煞星各有多少人? 你是什么时候感觉到物是人非的? 水浒传里所有人物的肖像描写 《战争与和平》描写的是哪一场战争? 是滑铁滑铁卢事件吗?还是? 《水浒传》中的段景住是个盗马贼,为何他也能坐上交椅呢? 战争与和平的背景是一战还是二战 家养的蛐蛐,蝈蝈怎么繁殖好 水浒传108单将的外貌 水浒传108条好汉图片和外号 蛐蛐怎么样养啊 百度地图打开后看不到怎么办?? 《水浒传》中有三条狗,这三条狗最后的结局如何呢? 托尔斯泰的长篇历史小说《战争与和平》,其中描写的战争是哪一场战争? 托尔斯泰创作的《战争与和平》描述的是哪段历史事件? 车厘子怎么吃最好 三清茶官网是哪个 车厘子可以空腹吃吗 空腹千万别吃这些水果 吃了黄瓜,间隔多少时间可以吃车厘子? 查找我的iphone怎么没动都会动是什么意思 为什么我在查找我的iphone定会他还会动 查找我的iphone位置在动能不能定位的 苹果手机搜索位置信息,在一个地点抖动是什么意思? 查找我的iphone对方没动,为什么地图显示在动 苹果查找朋友定位为什么会一直动 查找我的iphone在一个大约位置动来动去是怎么回事 13岁女孩有自尉是性早熟吗 我是女孩、18岁我自己经常手淫、那样正常吗 数据库管理系统是() 我是女生14岁手淫好不好有什么危害 我女儿才8岁 前些天发现她睡觉的时候有些怪异的动作 我掀开被子一看 发现他手放在私密处 我该怎么办? 我是个12岁的女孩,我想问,长期手淫好吗,不好要怎么戒? 12岁女孩那里湿了,怎么回事 数据库系统由人员、()和硬件等组成 A.操作系统 B.文件系统 C.编译系统 D.数据库管理系统 手淫成瘾了怎么办,人家就是喜欢用电动棒,放我的下面。20岁女。 数据库管理作业,大虾们帮帮忙,紧急!!! 女生对自己的分泌物怎么看 哪里可以得到14岁女孩禁处照片 12岁女生初潮问题。请女生进来。