到这 articles 表已经有一些数据了;
我们可以讲查询数据的方式了;
接着上篇文章加路由和控制器方法;
Route::prefix('database')->group(function () {
Route::get('insert', 'DatabaseController@insert');
Route::get('get', 'DatabaseController@get');
});
在控制器增加了个 get 方法;
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class DatabaseController extends Controller
{
/**
* 插入数据
*/
public function insert()
{
DB::table('articles')->insert([
[
'category_id' => 2,
'title' => '文章2',
'content' => '内容2'
],
[
'category_id' => 3,
'title' => '文章3',
'content' => '内容3'
],
]);
}
/**
* 查询数据
*/
public function get()
{
$data = DB::table('articles')->get();
dump($data);
}
}
DB table 选中表 调用 get 方法就可以获取全部的数据;
dump 是 laravel 的打印函数;
可以把它理解为 php 的 var_dump 函数的升级版;
访问 database/get
;
三角箭头表示是可以点击收起展开的;
按着 ctrl/cammand 键再点击三角箭头;
就可以展开或收起其下的全部数据;
但是实际开发中;
其实大多时候都不会取全部数据;
一般会有限制语句;
/**
* 查询数据
*/
public function get()
{
$data = DB::table('articles')
->where('id', 1)
->get();
dump($data);
}
DB 有个 where 方法;
第一参数就是字段名;
第二个参数是值;->where('id', 1)
表示限制 id 为 1;
那如果想取 id 不为 1 的数据呢?
where 可以接受第 3 个参数;
如果传 3 个参数;
第一个参数还是字段名;
第二个参数是符号;
第三个参数是值;->where('id', '<>', 1)
;
那自然也是可以传 >
和 <
了;
sql 中还有个 IN 的用法;
laravel 中就是 whereIn()
;
第一个参数还是字段名;
第二个参数是数组;
那取 id 为 1、2、3 的数据就这样写了;->whereIn('id', [1, 2, 3])
;
NOT IN 就是 whereNotIn()
;
Between 同理;
关联表就是 join 了;
可以传3个参数;
第一个参数就是要关联的表名;
可以使用 as 给表定义别名;
当表比较长的时候会比较方便;
第二个和第三个分别是关联的字段;
谁在前谁在后无所谓哈;->join('users as u', 'u.id', 'articles.user_id')
;
如果使用了 join 那 where 就同样要指明表了;->whereIn('u.id', [1, 2, 3])
;
联系到 sql 还会有 left join 和 right join ;
使用驼峰命名法即可;->leftJoin('users as u', 'u.id', 'articles.user_id')
;
分组和排序的则需要在关键字后面加个 by;->groupBy('u.id')
;
orderBy 还可以指定第二个参数用于指定正序还是倒序;orderBy('created_at', 'desc')
;
如果只想取指定字段的可以使用 select ;->select('u.id', 'u.name', 'u.email')
;
相应的最后的 ->get()
还可以替换为 first
、count
、sum
、pluck
、value
;
count 、 sum 这俩就不说了翻译意思就明白;
当我们要一个数据列表的时候使用 get 得到的是 2 维数组;
当我们只取一条数据的时候使用 first 得到的是 1 维数组;
当我们要一个数据列表但只要某个字段的时候使用 pluck ;
pluck 接受 2 个参数;
第一个参数是我们要取的字段;
第二个字段是可以选的;用来做 key ;
举个栗子;->pluck('content', 'title')
得到的就是下图的数据;
value 就简单了它获取的是一个值;->value('title')
得到的是 "文章2" ;
最后我们来个稍完整点的示例结束本篇;
$data = DB::table('articles')
->select('category_id', 'title', 'content')
->where('title', '<>', '文章1')
->whereIn('id', [1, 2, 3])
->groupBy('category_id')
->orderBy('id', 'desc')
->limit(1)
->get();
dump($data);
如果你使用的是 5.7 的mysql;
运行上面这段代码报 sql_mode=only_full_group_by 的错误;
回到 config/database.php 文件;
把 mysql 中的 strict 改为 false 即可;
至于为啥报这个错;
这又是一个扩展题自行搜索了解吧;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
xietianliao :在学习中
2018-04-25 17:12:48 回复
く义能づ :大神
2018-03-26 21:36:15 回复
蒲公英 :感谢,
2018-02-23 09:35:46 回复
沵→涐的№1 :上一篇 下一篇 问题,不同类目下的文章,要是运用排序后,上一篇,下一篇的 不会根据排序的顺序来,还是根据ID来的 ! 这个bug 发现了吗?
2018-02-12 09:59:30 回复
云淡风晴 :thinkphp 版本的博客之前是判断了;后来觉得判断的问题比较多;以及url的问题;给取消了;容我有空了加上判断;
2018-03-04 22:44:02 回复
记忆宫殿之旅 :写得好,目前不知道user表和password怎么用看5.1视频文件变了所以感觉有限制,自动填充估计和tp中自动完成的功能差不多
2018-02-04 18:46:04 回复
云淡风晴 :过后单独开篇文章讲解哈;
2018-02-05 00:24:49 回复
rk :去年就想抽时间深入学习Laravel想不到开年来有缘有到博主这篇系列入门教程,是讲Laravel工作原理的好案例,通俗易懂,好好学习,天天向上。
2018-02-03 19:20:53 回复
云淡风晴 :现在可以开始学了;
2018-02-05 00:25:15 回复
rk :已composer 安装laravel整装待发
2018-02-05 08:27:36 回复
南乡子 :
2018-02-13 22:06:50 回复
WuHuaJi0 :挺好的 博客
2018-01-29 18:02:29 回复
FBLMG :能否交换友链,博主
2018-01-29 14:18:08 回复
狠拽灬↘嘛 :?
2018-04-23 21:50:11 回复
最新评论