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种

模板引擎

相关文章
|
JavaScript Linux Shell
一款国内SSH终端工具
Windows系统中,连接linux ssh的管理终端常用好用的软件无疑是Xshell/SecureCRT/PUTTY三款终端软件。但这三款终端无法实现跨平台使用,以及部分软件需要昂贵的授权费用才能使用。现作者给大家推荐一款基于Electron + Vue的跨平台(windows/linux/macos)终端软件NxShell
一款国内SSH终端工具
|
缓存 测试技术 网络安全
gitlab ci cd 不完全指南
gitlab ci cd 不完全指南
706 1
一文搞懂Go语言错误处理【异常捕获、异常抛出】
一文搞懂Go语言错误处理【异常捕获、异常抛出】
一文搞懂Go语言错误处理【异常捕获、异常抛出】
|
存储 数据采集 边缘计算
物联网设备的边缘计算与数据处理:技术革新与应用展望
【7月更文挑战第8天】物联网设备的边缘计算与数据处理技术是推动物联网技术发展的重要力量。通过将数据处理和决策推向设备边缘,边缘计算实现了低延迟、数据隐私和安全、带宽优化以及可靠性等优势,为物联网应用的实时性、智能化和高效性提供了有力保障。未来,随着技术的不断进步和创新,边缘计算将在物联网领域发挥更加重要的作用,推动物联网技术的进一步发展。
|
机器学习/深度学习 人工智能 算法
Stable Diffusion AI绘画
Stable Diffusion是人工智能领域的文本到图像生成模型,基于概率的连续扩散过程,学习数据潜在分布并生成新样本。模型使用Web UI进行交互,提供不同采样器如Euler和DPM++,后者常配以Karras算法。提示词对生成效果至关重要,可以利用GPT等生成提示词。用户还能调整参数如高清修复和批处理次数来影响生成的图像。此外,模型文件(ckpt/safetensors)和Lora微调模型需存放在正确目录以确保功能正常。
|
Linux iOS开发 Docker
【开源推荐】简单的录屏工具
【6月更文挑战第5天】
575 9
|
安全 测试技术 Python
Python类中的Setter与Getter:跨文件调用的艺术
Python类中的Setter与Getter:跨文件调用的艺术
286 3
|
SQL HIVE UED
【Hive SQL 每日一题】分析电商平台的用户行为和订单数据
作为一名数据分析师,你需要分析电商平台的用户行为和订单数据。你有三张表:`users`(用户信息),`orders`(订单信息)和`order_items`(订单商品信息)。任务包括计算用户总订单金额和数量,按月统计订单,找出最常购买的商品,找到平均每月最高订单金额和数量的用户,以及分析高消费用户群体的年龄和性别分布。通过SQL查询,你可以实现这些分析,例如使用`GROUP BY`、`JOIN`和窗口函数来排序和排名。
1397 2
|
图形学
Unity Shader Graph 故障艺术
Unity Shader Graph 故障艺术
655 0
Unity Shader Graph 故障艺术
|
边缘计算 缓存 前端开发
前端性能优化:当页面渲染遇上边缘计算
当前几种常见的前端性能优化方案仍然不可避免地会存在一些缺点。本文在 ESI (Edge Side Include) 的基础上,提出了一种新的优化思路:边缘流式渲染方案(ESR),即借助 CDN 的边缘计算能力,将静态内容与动态内容以流式的方式,先后返回给用户。(文末福利:下载《覆盖全端业务的大前端技术》电子书)
4929 1
前端性能优化:当页面渲染遇上边缘计算

热门文章

最新文章