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