---
# System prepended metadata

title: laravel-4
tags: [laravel]

---

###### tags: `laravel`
DAY4-22.9.1
# laravel-4

# 先套入bootstrap的table格式
1. W3C -> bootstrap -> table -> try -> 複製
2. 放到view/對應的顯示頁面

# blade語法的CSS和原本的差異
  在laravel中, 由於放首頁的區域為public/ , 
  可以將此public當作平時我們操作php時最外層放index的位置
  所以當需要建立css/js/jq...等外部連結時, 在public內直接建立
  就可以在view/檔案 的路徑上直接使用
  如<pre><link rel="stylesheet" href="css.css"></pre>
  若想使用blade語法 連接外部檔案連結 格式則如下
  <pre><link rel="stylesheet" href="{{asset('css.css')}}"></pre>
  

# 建立與資料表的連線
1. 建立資料表
   例:資料表名 laravel_2022.9.1
2. 到.env 設定db
   DB_DATABASE=laravel_2022.9.1(資料表名稱)
   DB_USERNAME=root
   DN_PASSWORD=
   
3. 到gitBash輸入 : 
   php artisan migrate
   本地會依照步驟2連結到資料庫
   資料庫自動產生資料表
   
# php artisan migrate 
# 建立官方預設資料表
  簡易概念:
  migrate -> migration
  建立名詞 -> 執行動詞
  
- xampp phpmyadmin 差異 :
  mysql資料表 需手動一步步建立執行
  
- laravel migrate 差異 : 
  laravel資料表的建立
  在gitBash輸入 migrate 即可以自行生成laravel預設資料表
  <pre>php artisan migrate</pre> 
  
- 與上述建立相反 加上 :rollback 為格式化, 會回復到建立前
  <pre>php artisan migrate:rollback</pre> 

- 參考: 
  找到與資料表相關聯的區域
  Vscode -> Ctrl + P 搜尋 : migration 
  -> 2014.....table -> create(users....){table->id....} 
  這裡的資料是對應到users資料表的內容

# laravel 資料表常用屬性語法
官方文件:
官網/Database/Migrations/Available Column Types


# Generating Migrations
# 創建自定義資料表
再本地建立資料表 並上傳到資料表
1. 到指定位置
   官網/Database/Migrations/Generating Migrations
   複製:
   <pre>php artisan make:migration create_flights_table</pre>
   修改:
   <pre>php artisan make:migration create_自行命名(複數)_table</pre>
   範例:
   <pre>php artisan make:migration create_students_table</pre>

2. 在gitBash輸入: 上述範例
   會在migrations資料夾新增一筆
   2022_09_01_030141_create_students_table.php

3. 2022_09_01_030141_create_students_table.php內,
   有預設好的public function up(){$table->id()...
   其內容為該資料表的表格欄與屬性設置
   依照需求在裡面增加欄位 賦予屬性
   
4. 一樣當本地設置完資料表後
   先 migrate:rollback 格式化資料表
   再 migrate 上傳新格式
   
# integer // 類型:數字
-  參考官方文件:
   官網/Database/Migrations/Available Column Types/integer
1. 將資料表的字串類型格式 改為數字的格式
   原為:
   <pre>$table->string('english');</pre>
   改為:
   <pre>$table->integer('english');</pre>
2. 再php artisan migrate:rollback 將資料表 格式化一次
3. 再php artisan migrate 上傳新格式一次

   
# 補充 : 上面這些再幹嘛?
  練習建立資料表表格, 格式化會導致資料內容消失
  注意僅用在最初的建立資料表這件事情上
  若已有資料內容, 勿用rollback格式化資料表
  
# 補充 : 建立資料表時 XAMPP錯誤如何處理
1. 到xampp/mysql/data -> copy ->改名 : data.日期
2. 到xampp/mysql/backup/ -> copy資料夾的內容 -> 貼到上述的'舊data內'

# CVM->M=>Model , 模型的建立
-  官方文件:
   官網/8.0x/Eloquent ORM/Generating Model Classes
   
1. 建立模型 的語法
   複製 : 
   <pre>php artisan make:model Flight</pre>
   修改Class名稱 : 
   <pre>php artisan make:model 自行命名</pre>
   <pre>php artisan make:model Student <=注意這裡用大寫, 因為這裡是Class(慣例)</pre>
   git Bash 貼上修改後的格式
   會再專案底下建立一個 Models/Student.php
   
2. 給模型命名 的語法
   再到官網下面區域Table Name
   複製:
   <pre> protected $table = 'my_flights';</pre>
   修改:
   <pre> protected $table = 'Student';</pre>
   放到Models/Student.php的class內
   
3. 接收模型資料表 的語法
   往下到 Retrieving Models
   複製:
   <pre>use App\Models\Flight;
 
   foreach (Flight::all() as $flight) {
   echo $flight->name;
   }</pre>
   把Flight修改成 自行命名 Student
   <pre>use App\Models\Student;
 
   foreach (Student::all() as $student) {
   echo $student->name;
   }</pre>
   貼到控制台Controllers/對應資料的控制台StudentController.php
   拆成兩塊
   
   -
   use App\Models\Student; 
   貼到use區

   -
   foreach (Student::all() as $student) {
   echo $student->name;} 
   貼到public function index()的執行區內

------------------------------------------------------------------
-  CVM
   C=> Ctroller 控制台class function CRUD...等
   V=> View 顯示的畫面
   M=> Model 模型 
   建立模型(M) -> 從控制的地方(C) -> 把資料(C) -> 
   填入的資料表(C) -> 畫面顯示填入的資料(V)
   
   C --request---> M  響應
   M --response--> C  回傳
   
-  ORM
   每一種不同框架的ORM都是 : 
   用物件導向的方式操作原生語法, 進行連線DB 
   例如 :
   laravel的ORM 是用ORM代替PHP寫SQL的語法 
   便不須用PHP下複雜的SQL指令
------------------------------------------------------------------

#  從資料庫抓資料 > 呈現到頁面上

  
1. 官網/TheBasics/Routing /Implicit Binding/return view...
   複製:
   <pre>return view('user.profile', ['user' => $user]);</pre>
   照需求改成:
   <pre>return view('資料夾.檔名', ['要抓的資料' => $把要抓的資料設成變數]);</pre>
   <pre>return view('Student.index',['data' => $data]);</pre>
2. 到view用blade語法, 如同把php插入html一樣
   把資料呈現, 這裡使用blade語法
   <pre>
   @php函式
   中間可以自由寫入html語法
   @php函式end
   </pre>
   <pre>
   @foreach ($data as $student)
    < tr>
    	<td>{{$student->id}}</td>
    	<td>{{$student->name}}</td>
    	<td>{{$student->chinese}}</td>
    	<td>{{$student->english}}</td>
    	<td>{{$student->math}}</td>
     < /tr>
   @endforeach
   </pre>
   
# 未顯示時 檢查的順序:
1. 確認模型 M
2. 確認控制 C
3. 確認顯示 V
-  先到Models/Student.php 確認class內設置的資料表名稱正確
   <pre>protected $table = 'Students';</pre>
-  再到對應的控制台Controllers/StudentController.php 
   確認 控制的功能選項 撰寫正確 如
   <pre>
   class StudentController extends Controller{
         public function index(){
            $data= Student::all(); 
            return view('Student.index',['data' => $data]); 
         }
   }
   </pre>
-  最後呈現畫面
   到view/對應的顯示畫面student/index.blade.php
   確認 php顯示資料的函式正確 如
   <pre>
    @foreach ($data as $student)
    {{$student->name}}
    @endforeach
   </pre>

# 建立分頁 create
  
1. 確認routes/web.php 有內容 
   <pre>Route::resource('students', StudentController::class);</pre>
2. 建立分頁
   再views/自定義資料夾/新增 分頁檔名.blade.php
3. 建立控制台的控制
   再Http/Controllers/自定義控制台資料.php
   例Http/Controllers/StudentController.php
   再create的部分 新增執行內容
   <pre>
    public function create()
    {
        $data= Student::all();
        return view('Student.create',['data' => $data]); 
    }
   </pre>
   
   
   
   
# 把資料傳進資料庫 store
1. 資料來源:
   官網
   8.0x
   Eloquent ORM
   Getting Started
   Inserts

2. 放到控制台的store執行內容
   複製並放到Http/Controllers/StudentController.php
   的store 執行區域
<pre>
    public function store(Request $request)
    {
        // Validate the request...
 
        $flight = new Flight;
 
        $flight->name = $request->name;
 
        $flight->save();
    }
}
</pre>
 依資料表需求 修改:
<pre>
	public function store(Request $request)
	{
	    // dd("OK"); // 測試
	    $student = new Student();
	 
	    
	    $student->name = $request->name;
	    $student->chinese = $request->chinese;
	    $student->english = $request->english;
	    $student->math = $request->math;
	    $student->test = 1; // 因為再blade沒有test的表格 , 這裡嘗試用直接賦值1 取代
	
	    $student->save();
	
	    return redirect()->route('students.index'); <=redirect 同為location
	}
</pre>
   再 : views/自定義資料表/傳資料的分頁檔案
   例 : views/student/create.blade.php
   的from表單底下輸入
   @csrf
   會讓網頁自動生成一個hidden
   該hidden是一個帶有安全認證的功能, 如果沒輸入 @csrf , 跳轉頁面時  會顯示錯誤 419
   如下 : 
<pre>
    <form action="{{route('students.store')}}" method="post">
    @csrf
</pre>

# 施工中...
# Route時,URL 和 NAME 的差別

{{}}  ==  echo變數
   

   
   







