第一篇
模型
怎样新建模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getName()
{
return 'this is my name';
}
}
怎样使用模型
use App\Member;
echo Member::getName();
第二篇
laravel 提供三种操作数据库方式:DB facade(原始查找),查询构造器,Eloquent ORM。
facade : 正面。
Eloquent:雄辩。
DB facade
新建数据库与连接数据库
// .env 文件
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
// config/database.php 找到 mysql
'prefix' => '', //前缀
使用 DB facade 实现 CURD
$flag = DB::insert('insert into student(name, age) values(?,?)'
, ["helen", 16]
);
var_dump($flag);
/**
bool(true)
**/
$aStudent = DB::select('select * from student');
var_dump($aStudent);
/**
array(1) {
[0]=>
object(stdClass)#126 (3) {
["id"]=>
int(1)
["name"]=>
string(5) "helen"
["age"]=>
int(16)
}
}
可以通过 dd 来人性化输出
**/
$num = DB::update('update student set age = ? where name = ?'
, [34, 'helen']
);
var_dump($num);
// int(10) 返回修改行数
$num = DB::delete('delete from student where id > ?', [1]);
var_dump($num);
// int(10) 返回修改行数
查询构造器
新增数据
$bool = DB::table('student')->insert(['name' => 'michael', 'age' => 1]);
var_dump($bool);
$id = DB::table('student')->insertGetId(['name' => 'leon', 'age' => 1]);
var_dump($id);
$bool = DB::table('student')->insert([
['name' => 'leon', 'age' => 1],
['name' => 'michael', 'age' => 1],
]);
var_dump($bool);
修改数据
- 更新指定内容
$num = DB::table('student')->where('id', 12)->update(['age' => 11]);
// where 里面可以是关联数组,也可以是两个参数。
// update 里面必须是数组
- 自增和自减
$num = DB::table('student')->increment('age');
$num = DB::table('student')->increment('age', 3);
$num = DB::table('student')->decrement('age');
$num = DB::table('student')->where('id', '>=', 12)->increment('age', 5, ['name' => 'Bob']);
// 先用 where !!如果先用 increment 会返回整数,无法链式操作
删除数据
- delete
$num = DB::table('student')->where(['id' => 23])->delete();
$num = DB::table('student')->delete();
- truncate
DB::table('student')->truncate(); // 什么都不返回
查询数据
get
$student = DB::table('student')->get(); // 获取所有
first
$student = DB::table('student')->orderBy('id', 'desc')->first();
where
$student = DB::table('student')->where('id', '>=', '11')->get();
$student = DB::table('student')
->whereRaw('id >= ? and age = ?', [12, 22])->get();
pluck:采、摘
$student = DB::table('student')->pluck('name');
select
$student = DB::table('student')->select('id', 'name')->get();
chunk:大块的
DB::table('student')->orderBy('id')->chunk(3, function($student){
var_dump($student);
});
聚合函数
count
$count = DB::table('student')->count();
max
$max = DB::table('student')->max('age');
min
$min = DB::table('student')->min('age');
avg
$avg = DB::table('student')->avg('age');
sum
$sum = DB::table('student')->sum('age');
Eloquent ORM
简介、模型建立、查询数据
<?php
namespace App;
use ...;
class Student extends Model {
protected $table = 'student'; // 默认是 students
protected $primaryKey = 'id'; // 默认是 id
}
$students = Student::all();
$student = Student::find(33);
$student = Student::findOrFail(123); //找不到就报错
// 可以结合构造查询器里的内容一起使用,比如 chunk、count 等
$students = Student::get();
$student = Student::where('id', '>', '12')->orderBy('age', 'desc')->first();
新增数据、自定义时间戳、批量赋值
- 通过模型新增数据(涉及到自定义时间戳)
$object = new Student();
$object->name = 'leon';
$object->age = 12;
$flag = $object->save(); // 会在数据库中填充 created_at 和 updated_at 。
// 在模型中设置 public $timestamps = false; 即可关闭
// 可在模型中设置怎样更新created_at 和 updated_at 字段,如下
protected function getDateFormat() {
return time();
}
// 获取 created_at 和 updated_at 字段
$student = Student::find(12);
echo $student->created_at; //输出 2017-03-22 17:11:11
// 如果想输出它本来的样子,可以这样
protected function asDateTime($val) {
return $val;
}
- 使用模型 create 方法新增数据 (涉及到批量赋值)
// 首先要指定批量赋值的字段
protected $fillable = ['name', 'age'];
// 然后批量赋值
$student = Student::create(['name' => 'mm', 'age' => 12]);
// 指定不允许批量赋值的字段
protected $guarded = ['name'];
$student = Student::firstOrCreate(['name' => 'mm']); // 没有就插入并取出,有则取出
$student = Student::firstOrNew(['name' => 'newmm']); // 有则取出,没有就创建对象,想存数据库则save
$flag = $student->save();
修改数据
$student = Student::find(102);
$student->name = 'kitt';
$bool = $student->save(); // 此时还会更新 updated_at 的时间戳
$num = Student::where('id', '>', 101)->update(['age' => 12]); // 会更新 updated_at 的时间戳
删除数据
- 通过模型删除
$student = Student::find(1022);
$bool = $student->delete();
- 通过条件删除
$num = Student::where('id', '>', 101)->delete();
第三篇
blade模版引擎
模版继承
section
yield
extends
parent
// 父模版
@section('sidebar')
sidebar html 内容
@show
@yield('content', '一些内容');
// 继承
@extends('member.layouts')
@section('sidebar')
@parent
换了内容
@stop
// yield 一样用
@section('content')
新的内容
@stop
基础语法
// 控制器关联模版
return view('student.show', ['name' => 'leon']);
// 输出变量和一句话php都可以像一下使用
{{ $name }}
{{ date('Y') }}
{{ isset($name) ? $name : 'default' }} == {{ $name or 'default' }}
// 原样输出
@{{ $name }}
// 模版注释 (浏览器查看不到的注释)
{{-- 我是注释 --}}
// 引入子视图
@include('student.show')
// 可以传值给子视图
@include('student.show', ['msg' => 'welcome'])
流程控制
// if
@if ($id == 'leon')
i am leon
@elseif ($id == '111')
sss
@else
ddd
@endif
// unless
@unless ($name == 'michael') // 如果 name 值是 michael 不走下面!!!
oh
@endunless
// for
@for($i=1;$i<10;$i++)
sss{{$i}}
@endfor
// foreach
@foreach($stus as $stu)
{{$stu->name}}
@endforeach
// forelse
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>没有用户</p>
@endforelse
// while
@while (true)
<p>我永远都在跑循环。</p>
@endwhile
模版中的url
Route::any('url', ['as' => 'url', 'uses'=>'StudentController@urlTest']);
// url() 通过路由名称生成url
{{url('url')}}
// action() 通过指定控制器和方法名生成url
{{action('StudentController@urlTest')}}
// route() 通过别名生成url
{{route('url')}}