###### 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變數