Laravel基础篇-路由、视图、模型、Blade模板(3)

简介: Laravel基础篇-路由、视图、模型、Blade模板(3)

十、Eloquent ORM

Active Record

每一张表都有一个与之对应的模型Model


1、模型建立及查询数据

默认关联模型名称的复数表名

默认以id为主键


// 1、全部数据
Student::all();
// select * from `student`
// 2、根据主键id查找一条数据
Student::find(1);
// select * from `student` where `student`.`id` = 1 limit 1
// 3、根据主键id查找一条数据,如果没有抛出异常
Student::findOrFail(11);
// select * from `student` where `student`.`id` = 1 limit 1
// 4、获取列表
Student::get();
// select * from `student`
// 5、获取一条数据
Student::where('id', '>', 1)
    ->orderbyDesc('age')
    ->first();
//  select * from `student` where `id` > 1 order by `age` desc limit 1
// 6、chunk分次获取
Student::chunk(2, function ($data){
    var_dump($data);
});
// select * from `student` order by `student`.`id` asc limit 2 offset 0
// select * from `student` order by `student`.`id` asc limit 2 offset 2
// ...
// 7、聚合函数
Student::count();
// select count(*) as aggregate from `student`
Student::where('id', '>=', 1)
    ->max('age');
// select max(`age`) as aggregate from `student` where `id` >= 1

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

(1)通过模型新增,涉及到自定义时间戳

默认维护时间字段created_at, updated_at


[1]新增数据


# 取消自动维护时间字段,一般设置为true
public $timestamps = false;
# 自定义时间戳格式
public function getDateFormat(){
    return time();
}

通过模型新增数据


$student = new Student();
$student->name = '小孙';
$student->age = 23;
$bool = $student->save();
// insert into `student` (`name`, `age`, `updated_at`, `created_at`) 
// values ("小孙", 23, "157459359, "1574593597")

[2]获取数据

获取数据的时候会自动格式化


$student = Student::find(5);
echo $student->created_at;
// 2019-11-24 10:11:23
// 不自动格式化时间戳
protected function asDateTime($value)
{
    return $value;
}
// 自定义格式化
date('Y-m-d H:i:s', $student->created_at);
// 2019-11-24 10:11:23

时区设置

方法一:修改php.ini配置文件


// 查看php.ini文件路径
phpinfo()
$ cp php.ini.default php.ini
[Date]
date.timezone = PRC
// 或者
// date.timezone = "Asia/Shanghai"
// PRC是指中华人民共和国 (People's Republic of China)

方法二:临时修改


// 查看当前时区
date_default_timezone_get();
// 临时设置时区
date_default_timezone_set('Asia/Shanghai');

参考

PHP 的 date 日期时间函数库简介


如果不生效需要修改Laravel配置

config/app.php


// 'timezone' => 'UTC',
'timezone' => 'PRC',

(2)使用模型create方法新增数据,涉及批量赋值


// 指定允许批量赋值的字段
protected $fillable = ['name', 'age'];
// 指定不允许批量赋值的字段
protected $guarded = [];
$data = [
    'name'=> '小红',
    'age'=> 23
];
$student = Student::create($data);
// insert into `student` (`name`, `age`, `updated_at`, `created_at`) 
// values ("小红", 23, "157459331, "1574593314")

查找或创建 firstOrCreate()


// 存在则获取
$data = [
    'name'=> '小红',
    'age'=> 23
];
$student = Student::firstOrCreate($data);
// select * from `student` where (`name` = "小红" and `age` = 23) limit 1
// 不存在则创建
$data = [
    'name'=> '小红',
    'age'=> 25
];
$student = Student::firstOrCreate($data);
// select * from `student` where (`name` = "小红" and `age` = 25) limit 1
// insert into `student` (`name`, `age`, `updated_at`, `created_at`) 
// values ("小红", 25, "157459366, "1574593662")

查找或创建实例,保存需要调用save

firstOrNew()


3、修改数据

(1)模型更新


$student = Student::find(4);
// select * from `student` where `student`.`id` = 4 limit 1
$student->name = '大白';
$student->save();
// update `student` 
// set `name` = "大白", `student`.`updated_at` = 1574594275 
// where `id` = 4

(2)批量更新


Student::where('id', 1)->update(['name' => '大白']);
// update `student` 
// set `name` = "大白", `student`.`updated_at` = 1574594465 
// where `id` = 1

4、删除数据

(1)模型删除


$student = Student::find(4);
//  select * from `student` where `student`.`id` = 4 limit 1
$bool = $student->delete();
// delete from `student` where `id` = 4

(2)主键删除


$num = Student::destroy(1);
// select * from `student` where `id` in (1)
// delete from `student` where `id` = 1
$num = Student::destroy(1, 2, 3);
// select * from `student` where `id` in (1, 2, 3)
// delete from `student` where `id` = 2
// delete from `student` where `id` = 3
$num = Student::destroy([1, 2, 3]);
// select * from `student` where `id` in (1, 2, 3)
// delete from `student` where `id` = 1
// delete from `student` where `id` = 2
// delete from `student` where `id` = 3

(3)条件删除


$num = Student::where('id', '=', '1')->delete();
// delete from `student` where `id` = "1"

十一、Blade模板引擎

Blade模板引擎可以使用PHP代码

编译完成后会被缓存


1、模板继承

resources/views/student/layout.blade.php

<h1>@yield('title', '标题')</h1>
<div>
    @section('main')
        主要内容
    @show
</div>

resources/views/student/index.blade.php


@extends('student/layout')
@section('title')
    重写标题
@stop
@section('main')
    @parent
    重写内容
@stop

Controller返回模板


namespace App\Http\Controllers;
class StudentController extends Controller
{
    function list()
    {
        $data = [
            'name' => 'Tom'
        ];
        return view('student/index', $data);
    }
}

编译结果


<h1>重写标题</h1>
<div>主要内容重写内容</div>

2、基础语法和include


// 1、模板中输出PHP变量
{{ $name }}
// 2、模板中调用PHP代码
{{ time() }}
{{ date('Y-m-d H:i:s', time()) }}
{{ in_array($name, $arr) ? 'true' : 'false' }}
{{ var_dump($arr) }}
{{ isset($name) ? $name : 'default' }}
{{ $name or 'default' }}
// 3、原样输出
@{{ @name }}
// 4、注释
{{-- 这是模板注释,看不到 --}}
<!-- 这是html注释,可以看到 -->
// 5、引入子视图
@include('student.common', ['key' => 'value'])

3、流程控制


// if控制
@if($name == 'Tom')
    Tom
@elseif($name == 'Jack')
    Jack
@else
    else
@endif
// unless === not if
@unless($name != 'Tom')
    Tom
@endunless
// for循环
@for ($i=0; $i < 10; $i++)
    {{$i}}
@endfor
@foreach($students as $student)
    {{$student->name}}
@endforeach
// forelse 数组为空给默认值
@forelse($students as $student)
    {{$student->name}}
@empty
    null
@endforelse

4、模板中的URL

url 路由名称生成

action 控制器和方法名生成

route 别名生成


控制器设置


Route::get('student/list', ['as'=> 'list', 'uses'=> 'StudentController@list']);

三种方式结果一样


{{ url('student/list') }}
{{ action('StudentController@list') }}
{{ route('list') }}

http://localhost:8000/student/list


总结

安装Laravel

核心目录文件

路由

MVC

数据库操作3种

模板引擎

相关文章
|
SQL Oracle 关系型数据库
记录:java.sql.SQLException: ORA-00911: 无效字符...【亲测有效】
记录:java.sql.SQLException: ORA-00911: 无效字符...【亲测有效】
682 0
|
图形学
Unity Shader Graph 故障艺术
Unity Shader Graph 故障艺术
633 0
Unity Shader Graph 故障艺术
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
977 0
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
|
边缘计算 缓存 前端开发
前端性能优化:当页面渲染遇上边缘计算
当前几种常见的前端性能优化方案仍然不可避免地会存在一些缺点。本文在 ESI (Edge Side Include) 的基础上,提出了一种新的优化思路:边缘流式渲染方案(ESR),即借助 CDN 的边缘计算能力,将静态内容与动态内容以流式的方式,先后返回给用户。(文末福利:下载《覆盖全端业务的大前端技术》电子书)
4849 1
前端性能优化:当页面渲染遇上边缘计算
|
Web App开发 安全 数据安全/隐私保护
阿里云Web应用防火墙接入案例分享之http2.0
一、概述 阿里云云盾Web应用防火墙(Web Application Firewall, 简称 WAF)是一款网络安全产品,基于云安全大数据能力,用于防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源访问等OWASP常见攻击,并过滤海量恶意CC攻击;在本篇文章中,笔者通过两个http2.0业务的接入案例分享,给后续的业务接入提供参考借鉴的地方。
阿里云Web应用防火墙接入案例分享之http2.0
|
Shell
如何生成RSA2密钥
密钥文件说明:    1、rsa_private_key.pem:原始私钥(又称pkcs1私钥),适用于非Java开发语言;  2、rsa_private_key_pkcs8.pem:pkcs8私钥,适用于Java开发语言;  3、rsa_public_key.pem:商户公钥,需上传至应用中加签方式的应用公钥位置。
2357 11
|
前端开发 Android开发 编解码
图像的色调、饱和度、亮度调节
对于图像的色调、亮度、饱和度Android提供了ColorMatrix来供我们进行修改 ●setRotate(int axis, float degrees) 设置色调 参数一(axis):颜色编号1(红),2(绿),3(蓝) 参数二(degrees)...
2273 1
|
机器学习/深度学习 数据可视化 算法框架/工具
利用Python实现卷积神经网络的可视化(附Python代码)
本文简单说明了CNN模型可视化的重要性,以及介绍了一些可视化CNN网络模型的方法,希望对读者有所帮助,使其能够在后续深度学习应用中构建更好的模型。
12490 0
Nmon性能分析工具
一.简述 Nmon是一款计算机性能系统监控工具,因为它免费,体积小,安装简单,耗费资源低,广泛应用于AIX和Linux系统。nmon的使用需要2部分:nmon采集数据和nmon_analyzer可视化分析数据 二.
3299 0