#輕松學會Laravel-基礎篇
######Laravel 一鍵安裝包下載:[http://www.golaravel.com/download/](http://www.golaravel.com/download/)
###路由參數
```
Route::get('user/{id}', function($id){
return $id;
});
```
符合條件的路由:http://www.zhulinjie.com/laravel/public/user/1

```
Route::get('user/{name?}', function($name='zhangsan'){
return $name;
});
```
不傳參數訪問: http://www.zhulinjie.com/laravel/public/user

傳參數訪問:http://www.zhulinjie.com/laravel/public/user/zhulinjie

```
Route::get('user/{name?}', function($name='zhangsan'){
return $name;
})->where('name', '[A-Za-z]+');
```
符合條件的路由:http://www.zhulinjie.com/laravel/public/user/zhangsan

不符合條件的路由:http://www.zhulinjie.com/laravel/public/user/1

###別名路由
```
Route::get('user/user-personal', ['as'=>'personal', function(){
return route('personal');
}]);
```
符合條件的路由:http://www.zhulinjie.com/laravel/public/user/user-personal

###路由群組
```
Route::group(['prefix'=>'admin'], function(){
Route::get('user/user-personal', ['as'=>'personal', function(){
return route('personal');
}]);
});
```
符合條件的路由:http://www.zhulinjie.com/laravel/public/admin/user/user-personal

###控制器
routes.php
```
Route::get('user/personal', [
'uses' => 'PersonalController@index',
'as' => 'personal'
]);
```
PersonalController.php
```
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class PersonalController extends Controller
{
public function index(){
return route('personal');
}
}
```

###模型
Personal.php
```
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Personal extends Model{
public static function getAll(){
return 'data';
}
}
```
PersonalController.php
```
<?php
namespace App\Http\Controllers;
use App\Personal;
class PersonalController extends Controller
{
public function index(){
return Personal::getAll();
}
}
```

###使用DB facade實現CURD
```
CREATE TABLE `student` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '學生表',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '年齡',
`sex` tinyint(3) unsigned NOT NULL DEFAULT '10' COMMENT '10 未知 20 男 30 女',
`create_at` int(11) NOT NULL DEFAULT '0' COMMENT '新增時間',
`update_at` int(11) NOT NULL DEFAULT '0' COMMENT '修改時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
```
routes.php
```
Route::get('student', [
'uses' => 'StudentController@index',
'as' => 'student'
]);
```
StudentController.php
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 新增
// $bool = DB::insert('insert into student(name, age) values(?, ?)', ['lisi', 25]);
// var_dump($bool);
// 更新
// $num = DB::update('update student set age = ? where name = ?', [20, 'zhangsan']);
// 返回影響的行數
// var_dump($num);
// 刪除
// $num = DB::delete('delete from student where id > ?', [1]);
// 返回影響的行數
// var_dump($num);
// 查詢
$data = DB::select('select * from student where id >= ?', [1]);
dd($data);
}
}
```

###查詢構造器新增數據
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 新增一條數據
// $bool = DB::table('student')->insert(['name'=>'zhangsan', 'age'=>18]);
// var_dump($bool);
// 新增一條數據并獲取自增ID
// $id = DB::table('student')->insertGetId(['name'=>'lishi', 'age'=>20]);
// var_dump($id);
// 新增多條數據
$bool = DB::table('student')->insert([
['name'=>'wangwu', 'age'=>25],
['name'=>'zhaoliu', 'age'=>22]
]);
var_dump($bool);
}
}
```
###查詢構造器更新數據
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 更新 返回受影響的行數
// $num = DB::table('student')->where('id', 4)->update(['age'=>30]);
// var_dump($num);
// 自增1
// $num = DB::table('student')->where('id', 4)->increment('age');
// var_dump($num);
// 自增3
// $num = DB::table('student')->where('id', 4)->increment('age', 3);
// var_dump($num);
// 自減1
// $num = DB::table('student')->where('id', 4)->decrement('age');
// var_dump($num);
// 自減3
// $num = DB::table('student')->where('id', 4)->decrement('age', 3);
// var_dump($num);
// 自增3 同時將name改為zhulinjie
$num = DB::table('student')->where('id', 4)->increment('age', 3, ['name'=>'zhulinjie']);
var_dump($num);
}
}
```
###查詢構造器刪除數據
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 刪除id大于6的記錄 返回影響記錄行數
// $num = DB::table('student')->where('id', '>', 6)->delete();
// var_dump($num);
// 清空數據 不返回任何數據
DB::table('student')->truncate();
}
}
```
###查詢構造器查詢數據
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// get() 獲取多條記錄
// $students = DB::table('student')->get();
// dd($students);
// first() 獲取結果集中的第一條記錄
// $student = DB::table('student')->first();
// dd($student);
// where()
// $students = DB::table('student')->where('id', '>=', 2)->get();
// dd($students);
// whereRaw() 多條件查詢
// $students = DB::table('student')->whereRaw('id >= ? and id <= ?', [2,3])->get();
// dd($students);
// $students = DB::table('student')->whereRaw('id >= ? or age = ?', [3, 18])->get();
// dd($students);
// pluck() 從數據表中取得單一數據列
// $names = DB::table('student')->pluck('name');
// dd($names);
// lists() 也可以獲取單一數據列,但lists的第二個參數可以將某個字段當前鍵返回
// $names = DB::table('student')->lists('name');
// dd($names);
// $students = DB::table('student')->lists('age', 'name');
// dd($students);
// select() 指定查詢字段
// $students = DB::table('student')->select('name', 'age')->get();
// dd($students);
// chunk() 拆分查詢 備注:現在并不明白是什么意思和具體的使用場景
// echo '<pre>';
// DB::table('student')->chunk(3, function($students){
// print_r($students);
// });
echo '<pre>';
DB::table('student')->chunk(3, function($students){
print_r($students);
return false;
});
}
}
```
pluck() 方法瀏覽器中運行效果:

lists() 方法瀏覽器中運行效果:

chunk() 方法瀏覽器中運行效果:

chunk() 方法瀏覽器中運行效果:

###查詢構造器中的聚合函數
```
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// $num = DB::table('student')->count();
// var_dump($num);
// $max = DB::table('student')->max('age');
// var_dump($max);
// $min = DB::table('student')->min('age');
// var_dump($min);
// $avg = DB::table('student')->avg('age');
// var_dump($avg);
$sum = DB::table('student')->sum('age');
var_dump($sum);
}
}
```
###Eloquent ORM簡介、模型的建立及查詢數據
Student.php
```
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
// 指定表名
protected $table = 'student'; // 默認對應的是students表
// 指定主鍵
// protected $primaryKey = 'id'; // 默認主鍵就是ID
}
```
StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// $students = Student::all();
// dd($students);
// 獲取id為1的記錄,如果記錄不存在,返回null
// $student = Student::find(1);
// dd($student);
// 獲取id為11的記錄,如果記錄不存在,會報錯
// $student = Student::findOrFail(1);
// dd($student);
// 查詢構造器在ORM中的應用
// $students = Student::get();
// dd($students);
// $student = Student::where('id', 1)->first();
// dd($student);
// echo '<pre>';
// Student::chunk(3, function($students){
// print_r($students);
// });
// 查詢構造器中的聚合函數在ORM中的應用
// $num = Student::count();
// dd($num);
$max = Student::where('id', '>', 1)->max('age');
dd($max);
}
}
```
###Eloquent ORM中新增數據、自定義時間戳及批量賦值的使用
Student.php
```
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
// 指定表名
protected $table = 'student'; // 默認對應的是students表
// 指定主鍵
// protected $primaryKey = 'id'; // 默認主鍵就是ID
// 指定允許批量賦值的字段
protected $fillable = ['name', 'age'];
// 指定不允許批量賦值的字段
protected $guarded = [];
// 自動維護新增時間和修改時間
public $timestamps = true;
// 將新增時間和修改時間以時間戳的方式進行管理
protected function getDateFormat(){
return time();
}
// 在獲取新增時間和修改時間的時候不做任何處理 如果不寫這個方法 默認會將時間戳轉換成 2016-12-24 13:24:58 格式
protected function asDateTime($val){
return $val;
}
}
```
StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 使用模型新增數據
// $student = new Student();
// $student->name = 'zhangsan';
// $student->age = 18;
// $bool = $student->save();
// dd($bool);
// $student = Student::find(1);
// echo $student->created_at;
// 使用模型的create方法新增數據
// $student = Student::create(['name'=>'lishi', 'age'=>19]);
// dd($student);
// 以屬性值查找用戶 如果不存在 則新增數據
// $student = Student::firstOrCreate(['name'=>'wangwu', 'age'=>20]);
// dd($student);
// 以屬性值查找用戶 如果不存在 則新增數據
$student = Student::firstOrNew(['name'=>'zhaoliu', 'age'=>21]);
$bool = $student->save();
dd($bool);
}
}
```
###使用Eloquent ORM修改數據
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 通過模型更新
// $student = Student::find(1);
// $student->name = 'zhulinjie';
// $bool = $student->save();
// dd($bool);
// 結合查詢語句 批量更新
$num = Student::where('id', '>', 2)->update(['age'=>22]);
dd($num);
}
}
```
###使用Eloquent ORM刪除數據
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
// 通過模型刪除
// $student = Student::find(4);
// $bool = $student->delete();
// dd($bool);
// 通過主鍵刪除
// $num = Student::destroy(4);
// $num = Student::destroy(3, 2);
// $num = Student::destroy([3, 2]);
// dd($num);
// 根據指定條件刪除
$num = Student::where('id', '>=', 1)->delete();
dd($num);
}
}
```
###Blade模板引擎-流程控制
StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
return view('student', ['name'=>'zhangsan']);
}
}
```
student.blade.php
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>student</title>
</head>
<body>
@unless($name != 'zhangsan')
{{$name}}
@endunless
</body>
</html>
```

StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
$stu = Student::get();
return view('student', ['stu'=>$stu]);
}
}
```
student.blade.php
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>student</title>
</head>
<body>
<ul>
@forelse($stu as $val)
<li>{{$val->name}} {{$val->age}}</li>
@empty
<li>暫無數據</li>
@endforelse
</ul>
</body>
</html>
```

StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
$stu = [];
return view('student', ['stu'=>$stu]);
}
}
```

###Blade模板引擎-模板中的URL
>url() 通過路由的名稱生成url
>action() 通過指定控制器和方法名生成url
>route() 通過路由的別名生成url
StudentController.php
```
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function index(){
return view('student');
}
}
```
student.blade.php
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>student</title>
</head>
<body>
<ul>
<li><a href="{{ url('student') }}">{{ url('student') }}</a></li>
<li><a href="{{ action('StudentController@index') }}">{{ action('StudentController@index') }}</a></li>
<li><a href="{{ route('student') }}">{{ route('student') }}</a></li>
</ul>
</body>
</html>
```
