{{toc}}php
server { listen 80; server_name local.laravel.com; set $root_path '/www/laravel/public/'; root $root_path; index index.php index.html index.htm; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index /index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } }
数据库配置文件在.env中,经过config/database.php来调用,以下,经过env方法来获取变量名,若是变量没有值则赋值 localhost之类,.env文件能够不放在版本控制中css
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ],
数据库 表、字段各类操做都可在控制器中执行,见 http://laravelacademy.org/post/130.html
只要访问该方法,则会直接影响数据库结构html
$ php artisan migrate
$ php artisan migrate:rollback 这个命令 和 refresh命令会清掉全部的数据
$ php artisan make:migration create_articles_table --create=articals
$ php artisan make:migration add_intro_column_to_articles --table=articals
php artisan make:model Artical
laravel修改字段可经过控制器来执行, 用的是Schema门面mysql
Schema::table('users', function ($table) { $table->string('name'); });
经过命令行CURDnginx
php artisan tinker >>> $artical = new App\Artical; => App\Artical {#674} >>> $article->title='my first title'; => "my first title" >>> $article->content='content'; => "content" >>> $article->published_at=Carbon\Carbon::now(); => Carbon\Carbon {#679 +"date": "2016-10-11 11:37:54.000000", +"timezone_type": 3, +"timezone": "UTC", } >>> $artical; => App\Artical {#674} >>> $article; => {#677 +"title": "my first title", +"content": "content", +"published_at": Carbon\Carbon {#679 +"date": "2016-10-11 11:37:54.000000", +"timezone_type": 3, +"timezone": "UTC", }, } >>> $a->save(); => true >>> $a->toArray(); => [ "title" => "my first title", "content" => "content", "published_at" => Carbon\Carbon {#671 +"date": "2016-10-11 12:01:35.000000", +"timezone_type": 3, +"timezone": "UTC", }, "updated_at" => "2016-10-11 12:01:46", "created_at" => "2016-10-11 12:01:46", "id" => 1, ] 查找 >>> $first=App\Article::find(1); => App\Article {#685 id: 1, title: "my first title", content: "content", published_at: "2016-10-11 12:01:35", created_at: "2016-10-11 12:01:46", updated_at: "2016-10-11 12:01:46", } 更新 >>> $first->title='update'; => "update" >>> $first->save(); => true 条件查找 得到数据集 >>> $second=App\Article::where('content','=','content')->get(); 或者 >>> $second=App\Article::where('content','=','content')->first(); => Illuminate\Database\Eloquent\Collection {#692 all: [ App\Article {#693 id: 1, title: "update", content: "content", published_at: "2016-10-11 20:07:12", created_at: "2016-10-11 12:01:46", updated_at: "2016-10-11 12:07:12", }, ], }
总结建立表的过程:laravel
Route::get('/', function () { return view('welcome'); }); // 基础路由 Route::get('basic1', function () { return 'hello world basic1'; }); // 基础路由 Route::post('basic2', function () { return 'hello world basic2'; }); // 多请求路由 响应指定请求类型 Route::match(['get','post' ], 'multy1', function () { return 'multy1'; }); //多请求路由 响应全部的请求类型 Route::any('multy1', function () { return 'multy2'; }); //路由参数 Route::get('user/{id}', function ($id) { return 'userid-'.$id; }); //路由参数 非必须 Route::get('user/{name?}', function ($name=null) { return 'username-'.$name; }); //参数 正则 Route::get( 'user1/{name?}', function ($name=null) { return 'username-'.$name; })->where('name','[A-Za-z]+'); //多参数 正则 Route::get( 'user2/{id}/{name?}', function ( $id, $name=null) { return 'userid-'.$id . 'username-'.$name; })->where( [ 'id'=> '[0-9]+' , 'name'=>'[A-Za-z]+'] ); //路由别名 别名的做用并不是是经过center就能够直接访问,而是利用控制器或view根据别名生成url Route::get('user3',['as'=>'center',function () { return route('center'); }]); //群组路由 前缀 Route::group( ['prefix'=>'member'],function(){ Route::get('basic1', function () { return 'hello world basic1'; }); Route::post('basic2', function () { return 'hello world basic2'; }); } );
使用artisan建立控制器
php artisan make:controller TestControllerweb
控制器目录:app/Http/Controllers
控制器命名规则:MemberControllerajax
//路由关联控制器 方法一: MemberController控制器的info方法 Route::get('member/info','MemberController@info'); //路由关联控制器 方法二: 以数组的形式指定控制器和别名 Route::get('member/info1', [ 'uses' =>'MemberController@info' , 'as' => 'memberinfo1' ]); //路由关联控制器 参数绑定 在控制器中传入id 便可 Route::get('member/info3/{id}','MemberController@info')->where('id', '[0-9]+');
参考:http://www.ynpxrz.com/n802045c2025.aspxsql
默认使用symfony的http请求方法数据库
public function request1(Request $request){ //1.取值 若是没有能够加一个默认值 '未知' $request->input('name','未知'); if( $request->has('name') ){ echo $request->input('name'); }else{ echo '无该参数'; } //2.取全部的参数 $res = $request->all(); //dd($res); //3.判断请求类型 echo $request->method(); if( $request->isMethod('GET') ){ echo 'is get'; }else{ echo 'is not get'; } // 4.判断 ajax请求 $request->ajax(); //5.判断路由符合特定规则 $res = $request->is('student/*'); echo $res; //6.获取当前url echo $request->url(); }
$arr = [ 'name' => 'alice', 'age' => '12' ]; //return response()->json($arr); // 重定向 并带session flash,还能够带别的 cookie input等 return redirect('student/session2')->->with('message1', '我是快闪数据'); //重定向2 return redirect()->action('StudentController@session2')->with('message1', '我是快闪数据'); //重定向3 route 别名 return redirect()->route('student-url'); //回退 return redirect()->back();
// 1. http request session() $request->session()->put('k1','v1'); echo $request->session()->get('k1'); //2.session() session()->put('k2','v2'); echo session()->get('k2'); //3.Session类 Session::put('k3','v3'); echo Session::get('k3','default');//若是k3不存在就default //4.以数组形式存储 Session::put(['k4'=>'v4']); echo Session::get('k4'); //5.把数据放数组中 Session::push('student','alice'); Session::push('student','alice1'); //dd( Session::get('student') );//arr //6.ds sxb 删除session $res = Session::pull('student'); $res = Session::get('student'); dd( $res );//null //7.取出全部的值 $res = Session::all(); //8.判断 session是某个key否存在 Session::has('k1'); //9.删除某个key的值 Session::forget('k1'); //10. 删除全部 Session::flush(); //11.暂存 Session::flash('flash-k1','flash-v1'); echo Session::get('flash-k1');//只能第一次取的时候有
//宣传页 Route::get('student/activity0','StudentController@activity0'); //活动页 Route::group(['middleware'=>['activity'] ],function(){ Route::get('student/activity1','StudentController@activity1'); Route::get('student/activity2','StudentController@activity2'); });
public function activity0(){ return '活动即将开始,敬请期待'; } public function activity1(){ return '活动1进行中,谢谢您的参与'; } public function activity2(){ return '活动2进行中,谢谢您的参与'; }
app/Http/Middleware/Activity.php
namespace App\Http\Middleware; use Closure; //use Illuminate\Support\Facades\Auth; class Activity { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = null) { echo '我是前置'; if( time() < strtotime('2016-10-06') ){ return redirect( 'student/activity0' ); } //正常执行 把请求扔给$next return $next($request); echo '我是后置'; } }
app/Http/Kernel.php
protected $routeMiddleware = [ 'activity' => \App\Http\Middleware\Activity::class, ];
//对应view目录 resources/view/member/info.blade.php return view('member/info',[ 'name'=>'alice', 'age' => 18 ]); 在info.blade.php中 经过 {{ $name }} {{ $age }} 来获取参数
在app下新建一个Member.php 模型
namespace App; use Illuminate\Database\Eloquent\Model; class Member extends Model { public static function getMember(){ return 'member name is alice'; } }
在控制器中调用Member模型:
return Member::getMember();
使用原生的sql语句操做数据库
//数据库 插入 retun bool $bool = DB::insert('insert into student(name,age) VALUES (?,?)',['alice',18]); var_dump($bool); //数据库 更新 retun num 行数 $num = DB::update('update student set age = ? where name = ?',[20,'alice']); var_dump($num); //数据库 查询 return arr $students = DB::select( 'select * from student where id > ?', [1] ); var_dump($students); //数据库 删除 return num 行数 $numDelete = DB::delete('delete from student where id>?',[1]); var_dump($numDelete);
使用查询构造器操做数据库
//新增 return bool $bool = DB::table('student')->insert( ['name'=>'imooc','age'=>18] ); var_dump($bool); //新增 一条数据 并获得它的自增id return id $id = DB::table('student')->insertGetId( ['name'=>'imooc1','age'=>18] ); var_dump($bool); //新增多条数据 return bool $bool = DB::table('student')->insert([ ['name'=>'imooc2','age'=>18], ['name'=>'imooc3','age'=>18], ['name'=>'imooc4','age'=>18], ['name'=>'imooc5','age'=>18], ['name'=>'imooc6','age'=>18], ]); var_dump($bool);
//更新指定内容 $num = DB::table('student')->where('id',8)->update(['age'=>30]); //指定字段自增 属于批量操做 自减 同理 decrement $num = DB::table('student')->increment('age'); $num = DB::table('student')->where('id',8)->increment('age',3); //自增的时候修改其余字段 $num = DB::table('student')->where('id',8)->increment('age',3,['name'=>'joe']);
$num = DB::table('student')->where('id',13)->delete(); //能够用表达式 where('id', '>=' , 13) //清空表 不返回任何东西 DB::table('student')->truncate();
//get() 获取表的全部数据 $students = DB::table('student')->get();
$students = DB::table('student')->orderBy('id','asc')->first();
$students = DB::table('student')->where('id','>=',2)->get(); //where()多个条件 $students = DB::table('student')->whereRaw('id>=? and age>?',[1,24])->get();
//pluck()返回结果集中指定的字段 $names = DB::table('student')->pluck('name');
//lists() 也能够实现pluck的效果,同时 lists能够指定某个字段为key $names = DB::table('student')->lists('name','id');
//select 指定字段查询 $names = DB::table('student')->select('id', 'name','age')->get();
//chunk 分段获取数据 每次查2条 echo '<pre>'; DB::table('student')->chunk(2,function($students){ var_dump($students); return false;//指定条件下 中止查询 }); echo '</pre>'; dd($names);
$num = DB::table('student')->count(); $v = DB::table('student')->max('age'); $v1 = DB::table('student')->min('age'); $avg = DB::table('student')->avg('age'); //平均数 $sumage = DB::table('student')->sum('age');
app/Student.php
use Illuminate\Database\Eloquent\Model; class Student extends Model { //指定表名 protected $table = 'student'; //指定id protected $primaryKey = 'id'; //指定容许批量赋值的字段 多个字段赋值 protected $fillable = ['name','age']; //指定不容许批量赋值的字段 //protected $gaurded = []; //自动维护时间戳 public $timestamps = true; //设置时间戳为nginx时间 protected function getDateFormat(){ return time(); } //控制器里的 $student = Student::find(15);echo $student->created_at;返回时间戳 而不是格式化后的时间 protected function asDateTime($val){ return $val; } }
//all $students = Student::all(); //find $student = Student::find(8); //atrributes里查看 //findOrFail $student = Student::findOrFail(18);//没找到就报错 //使用查询构造器 查询 //get $students = Student::get(); //first $students = Student::where('id','>=', 8)->orderBy('age','asc')->first(); //查询数据库判断结果是否为空 $users = DB::table('users')->where('id',$id)->get(); Eloquent已经给咱们封装几个判断方法以下 if ($users->first()) { // } if (!$users->isEmpty()) { // } if ($users->count()) { // } //chunk 分批 Student::chunk(2,function($students){ var_dump($students); }); // 查询构造器的聚合函数 $num = Student::count(); $max = Student::where('id','>=', 8)->max('age');
建立数据有几个方法:
//实例化 $student = new Student(); $student->name = 'melody1'; $student->age = 23; //保存数据到数据库 并自动维护 created_at 和 updated_at字段 ,若是不想维护 须要在 模型中 关闭 $timestamps = false $student->save(); $student = Student::find(15); echo $student->created_at;//格式化 后的时间 2016-09-09 17:23:14 //若是不想格式化 须要在模型中 写个函数 asDateTime
//使用create方法新增数据 批量 多个字段 $student = Student::create(['name'=> 'frank','age'=>32 ]);
//firstOrCreate() 以属性查找,若是没有则新增 $student = Student::firstOrCreate(['name'=> 'frank']);
//firstOrNew 以属性查找,若是没有则实例化一个 能够经过 save保存到数据库 $student = Student::firstOrNew( ['name'=> 'frank1'] ); $student->save();
$student = Student::find('27'); $student->name = 'kitty'; $bool = $student->save();
$num = Student::where('id','>=',9)->update(['age'=>36]);
Student::find('27')->delete();
Student::destroy('23','28');//批量删除也能够用数组 [1,2,3]
Student::where('id','>=',10)->delete();
view/layout.blade.php
<!DOCTYPE html> <html> <head> <title>Laravel-@yield('title')</title> <style> </style> </head> <body> <div class="container"> <div class="header"> @section('header') 头部 @show </div> <div class="main"> <div class="sidebar"> @section('sidebar') 侧边栏 @show </div> <div class="content"> @yield('content','内容区') </div> </div> <div class="footer"> @section('footer') 底部 @show </div> </div> </body> </html>
@extends('layout'); @section('title') @parent 模板 @stop @section('header') @parent header @stop @section('content') @parent content @stop
$students = Student::get(); return view('student.section1',[ 'name'=>'alice', 'students'=>$students ]);
{{--模板中输出变量--}} {{$name}} {{-- 模板中使用php源码 --}} <p>{{ time() }}</p> <p>{{ date('Y-m-d H:i:s',time()) }}</p> <p>{{ isset( $age ) ? $age : 'default age 30' }}</p> <p>{{ $name1 or 'default name1' }}</p> {{--原样输出--}} <p>{{ @name }}</p> {{--引入子势图--}} @include('student.comment',['message'=>'错误信息'])
if unless for foreach forelse
{{--流程控制--}} @if( $name == 'alice1' ) I'm alice1 @elseif( $name== 'alice' ) I'm alice @else who am I? @endif {{-- unless 是 if的取反 --}} @unless( $name=='alice1' ) <p>this is alice</p> @endunless {{--for--}} @for( $i= 0; $i<10;$i++ ) {{$i}} , @endfor {{--foreach--}} @foreach( $students as $student ) {{ $student->name }} @endforeach {{--forelse 若是有数组则输出 若是没有则提示我是空--}} @forelse( $students as $student) {{ $student->name }} @empty 我是空数组 @endforelse
{{--url('路由的名称')--}} <a href="{{ url('url') }}"> url() </a>
{{--action(控制器名@方法名)--}} <a href="{{action('StudentController@url')}}">action()</a>
{{--router('别名')--}} <a href="{{route('student-url')}}">route()</a>
$students = Student::paginate(5);
{{ $students->render() }}
php artisan make:seeder AdminsTableSeeder
执行完命令后将会在 database/seeds 目录下生成 AdminsTableSeeder.php 文件。接下来咱们定义一个数据模型工厂,在 database/factories/ModelFactory.php 中添加以下代码:
<?php /* |-------------------------------------------------------------------------- | Model Factories |-------------------------------------------------------------------------- | | Here you may define all of your model factories. Model factories give | you a convenient way to create models for testing and seeding your | database. Just tell the factory how a default model should look. | */ $factory->define(App\User::class, function (Faker\Generator $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->safeEmail, 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => str_random(10), ]; }); $factory->define(App\Models\Admin::class, function (Faker\Generator $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->safeEmail, 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => str_random(10), ]; });
模型工厂定义完成后,在 AdminsTableSeeder.php 中填充数据:
<?php use Illuminate\Database\Seeder; class AdminsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory('App\Models\Admin',3)->create([ 'password' => bcrypt('123456') ]); } }
填充数据弄好后,在 DatabaseSeeder.php 中加入 AdminsTableSeeder 类
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // $this->call(UsersTableSeeder::class); $this->call(AdminsTableSeeder::class); } }
最后执行迁移命令:
php artisan migrate --seed