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种

模板引擎

相关文章
|
存储 算法 编译器
【c 语言 】移位操作符详解
【c 语言 】移位操作符详解
1324 0
|
Windows
Windows的mklink使用方法
【5月更文挑战第20天】Windows的mklink使用方法
1621 0
|
敏捷开发 监控 数据可视化
2024 高效办公必备的 5 款可视化看板工具
在数字化时代,可视化看板成为提高工作效率和优化项目管理的关键工具。广泛应用于项目管理、团队协作、生产流程监控和个人任务管理,通过清晰展示进度、任务分配和问题跟踪等信息,促进团队沟通与协作,提升整体效能。文中介绍了五款提升办公效率的可视化办公工具:板栗看板、Wrike、ClickUp、Taiga和Wekan,它们各自具备独特的优点和适用场景,如板栗看板适合团队协作,Wrike功能强大适合大型项目,ClickUp高度可定制,Taiga适用于敏捷开发,Wekan开源灵活。
2107 4
2024 高效办公必备的 5 款可视化看板工具
|
机器学习/深度学习 自然语言处理 算法
机器学习核心:监督学习与无监督学习
本文深入解析了机器学习中的监督学习与无监督学习,涵盖理论基础、应用场景及典型算法实现,如线性回归、决策树、K均值聚类和主成分分析,并通过代码示例加深理解。适合初学者和进阶者阅读。
1126 5
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
556 1
|
Web App开发 前端开发 Windows
CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)
CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)
|
搜索推荐 算法
模型小,还高效!港大最新推荐系统EasyRec:零样本文本推荐能力超越OpenAI、Bert
【9月更文挑战第21天】香港大学研究者开发了一种名为EasyRec的新推荐系统,利用语言模型的强大文本理解和生成能力,解决了传统推荐算法在零样本学习场景中的局限。EasyRec通过文本-行为对齐框架,结合对比学习和协同语言模型调优,提升了推荐准确性。实验表明,EasyRec在多个真实世界数据集上的表现优于现有模型,但其性能依赖高质量文本数据且计算复杂度较高。论文详见:http://arxiv.org/abs/2408.08821
669 7
|
SQL 前端开发 JavaScript
Web前端开发工程师岗位要求
Web前端开发工程师岗位要求
|
搜索推荐 vr&ar UED
虚拟现实与增强现实的融合:沉浸式体验的新时代
【9月更文挑战第17天】虚拟现实(VR)与增强现实(AR)的深度融合正开启沉浸式体验的新时代。两者结合不仅革新了游戏娱乐,让玩家在虚拟与现实中自由互动,还在教育中打破了传统课堂限制,使学习更直观有趣。在医疗领域,VR/AR助力手术模拟与康复训练,提升医疗服务水平。文旅产业也迎来升级,游客能深入体验历史文化。尽管面临技术成熟度与普及性挑战,但未来将带来更多个性化与智能化的沉浸式体验,推动各行各业的高质量发展。
|
消息中间件 Java 数据库连接
Hologres 数据导入与导出的最佳实践
【9月更文第1天】Hologres 是一款高性能的实时数仓服务,旨在提供快速的数据分析能力。无论是从外部数据源导入数据还是将数据导出至其他系统,都需要确保过程既高效又可靠。本文将详细介绍如何有效地导入数据到 Hologres 中,以及如何从 Hologres 导出数据。
795 1