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种

模板引擎

相关文章
|
4天前
|
资源调度 前端开发 JavaScript
推荐一款可以自动创建视频的前端Ract框架
推荐一款可以自动创建视频的前端Ract框架
|
5月前
|
小程序
laravel8(二)配置自定义路由文件
关于laravel5添加自定义路由文件,请移步《laravel5.8(十五)新增自定义路由文件》 这里大概记录一下laravel8添加自定义路由文件的过程: 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 1:首先在routes目录下创建你要添加的自定义路由文件 我这里直接复制的web.php。 2:修改app/Providers目录下RouteServiceProvider.php文件 我这里也是直接复制web部分的代码改的名字 3:修改app/Http目录下Kernel.php文件 我这里还是直接复制web部分的代码改的名
37 1
|
11月前
|
机器学习/深度学习 SQL 分布式计算
PAI-Designer中的EasyRec组件和预制推荐模板介绍
EasyRec是一个配置化的企业级推荐算法框架(https://github.com/alibaba/EasyRec),是阿里云PAI平台自研的适用于推荐广告、搜索场景的深度学习算法库,它实现了多种业界常用的模型,包括DSSM、MIND召回模型,DeepFM、多塔、DIN排序模型,还有ESMM、DBMTL、MMoE等多目标排序模型。 本文介绍EasyRec的PAI-Designer组件和预制模板。
317 1
|
JavaScript 程序员
vue设计一个高扩展性能的路由和实现菜单与路由相结合
我们知道路由一般有两种方案,第一种是基于我们的配置的,另一个就是基于我们自己本身写代码的程序猿自己约定的,约定就是第三方轮子提供的工具暗战其规范生成的路由的配置。
vue设计一个高扩展性能的路由和实现菜单与路由相结合
|
调度 Python
Flask学习与项目实战4:视图高级之蓝图和子域名、类视图
对于大项目,代码都不放在app.py里面,需要分类。 即类似javaspringboot中的分层?每个功能分为一个更小规格的层次。 url_prefix 就是 蓝图的前缀。 和book相关的都在book中,和用户有关的都在user中。
Flask学习与项目实战4:视图高级之蓝图和子域名、类视图
|
测试技术 PHP
Laravel 8 新特性: 动态Blade组件、事件监听器优化、事件测试助手
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
281 0
|
缓存 前端开发 关系型数据库
Laravel基础篇-路由、视图、模型、Blade模板(1)
Laravel基础篇-路由、视图、模型、Blade模板(1)
117 0
|
SQL 缓存 PHP
Laravel基础篇-路由、视图、模型、Blade模板(2)
Laravel基础篇-路由、视图、模型、Blade模板(2)
118 0
|
前端开发
symfony2框架配置页面
symfony2框架配置页面
102 0
symfony2框架配置页面
|
PHP
【laravel】@11 blade模板
【laravel】@11 blade模板
89 0
【laravel】@11 blade模板