今天会介绍laravel一些简单的指令
以及建立路由还有CRUD方法
跟资料库连线喔!!
在开始实作之前我们先把env连线资料库开好吧!!
首先我们要先把xampp里面mysql打开来
接者在laravel的.env档 把资料库连线设定好
xampp的预设帐号密码是root密码为空白
接者database可以使用mysqlworkbench或是phpmysqmin建立
编码可以使用utf8-unicode
这边就不做说明了
想先跟大家分享我在建立laravel新的物件CRUD时习惯的流程
PS 不一定要跟我一样但是我习惯这样的做法原因会在後面补充!!
比如说: 有些人习惯先建migration 在建立model再来controller最後在route
顺序没有对错但是只要启动serve前所有的资料相依跟function路径正确即可喔!!
这边会依照顺序是laravel convention影响(也就是透过你的指令命名会影响到MVC的相依姓)
首先我会先建立model并且建立资料表!!
这时候可以先下
php artisan make:book --migration
PS 这边给大家一个观念model习惯单数!!
或是可以使用-mc 建立migration +controller
但这边我建议只要附加migraion就好C可以拿掉
因为建立controller时有更好的方式 !!!
就是加resource参数(会一次帮你把CRUD都建好)
接者因为我们建立好model并且有使用参数建立好migration
可以打开路径app/database/migrations里面的
create_books_table.php档案(通常前面会加建立migration的时间戳)
PS这边请看migration会自动建立books的档案名称以及里面资料表名称也叫做books复数形式
这个是laravel的惯例用法
如果是习惯先建立migraion的人
在建立model也可以
但是如果model跟资料表名称不一样时
要记得在model里面修改你要指定的资料表名称喔
EX 比如说这边model叫做books 你的资料库叫做my_books
那麽必须要增加以下这行
protected $table = 'my_books';
完整的model应该会长这样
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_books';
};
如果是照我的流程走就不需要这样做喔!!
接者各位看一下这张图
我们可以看到第一个就是function up跟function down
这个是什麽意思呢?
可以把他想像laravel 在做资料库的建立,修改栏位,删除表单。。。。等
都会透过migration档案来控管版本(就是资料表版的git)
up就是你要针对资料表的操作
dowm就是你要回朔操作的方法
EX:
如果你的up是create table那麽down就是drop table
如果你的up是新增资料表中的栏位 那麽down就是drop column
这边我们就在id的下面新增一个string的字串型态并且栏位名称叫做title
好了之後就下指令进行migtaion吧
php artisan migrate
通常如果出现错误都是资料栏位设定异常喔!!
好了之後可以透过GUI打开来看是否table有建立成功
这边比较简单
我们可以使用
php artisan make:BookController --resource
来建立book的controller记得model关键字要大写喔
并且增加resource参数
可以使你的laravel controller帮你建立好CRUD方法详细可以看我前一页的对照表!!
接者我们可以在
路径routes资料夹底下的web.php打开
这边就是设定laravel route的地方
我们这边在最後新增
Route::resource('books','BookController');
如此一来laravel就可以针对 path是books的进行controller的CRUD对应function
PS新版的laravel请注意(laravel 8版)
请把app/Providers/RouteServiceProvider.php打开
并且第29行的
protected $namespace = 'App\\Http\\Controllers';
注解取消,如果没有请补上这行
这个程序码是为了让路由找到controller
非常重要不然会出错喔!!
在撰写controller前
我们先进app/Models/Book.php档案
我们把
protected $fillable = ['title', 'author'];
补上
这个功能是为了让mass assignment 成功!(前端资料自动map Model的key-value)
这是什麽意思呢
比如说前端传一大堆json
这时laravel会自动帮你把前端的key对应value建立物件
就不需要一个个属性指定喽
一个个指定要这样做
$book = new BOOK;
$book->title = $request->title;
$book->author = $request->author;
$book->save();
mass assignment可以这样做
$books = Book::create(request()->all())
那回到为什麽要增加$fillable属性
这是怕前端有传一些不必要的值导入资料库
那麽我只限定title,author这两个属性可以处理
id跟日期我要自行处理
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
protected $fillable = ['title', 'author'];
}
接者还有一个设定要请各位打开来
就是
app/Http/Middleware/VerifyCsrfToken.php
里面的程序码我们改成
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
'*'
];
}
这个 星号 是为了laravel在form data传送时会验证csrf token
我们可以先使用这方法略过否则create跟update会失败喔!!
接者就进入主轴拉
我们打开app/http/controllers/bookcontroller.php
先在use Illuminate\Http\Request;
新增
use App\Models\Book;
因为我们需要使用这个model的静态方法
接者我们可以看到因为加上resouece参数建立好的一大堆function
首先
这边真正存到资料库是store 而不是create喔!!
因为laravel create预设是给使用者导向填表单的view
不过我们这边直接使用postman没有view所以跳过create function
进到store function
public function store(Request $request)
{
//
$books = Book::create(request()->all()) ;
return response($books);
}
这边使用laravel create的方法
透过request把前端传过得来的值
我们这边可以使用all()把所有属性指定出来
这样$books的物件就建立好喽!!
create是laravel新版方法,旧版还需要使用save()
接者return 回去给前端看看成功的资料
这边输入post方法
path: localhost:8000/books
body选择form
把title跟author输入上去
送出就可以看成功的画面喽!!
与post一样我们这边直接到update方法
public function update(Request $request, $id)
{
//
$book = Book::find($id);
$book->title = $request->title;
$book->save();
return response($book);
}
我们透过先找到该书籍的ID
再来把前端传过来的title改过最後储存进资料库!!
这边的postman要记得
把路径是localhost:8000/books/2
books後面是id
public function destroy($id)
{
//
$book = Book::find($id);
$book->delete();
return response('删除成功');
}
这边不用带入资料跟update一样
只需要path後面带ID即可
不过为了简单呈现我把它使用index function
为了让他route网页首页呈现
public function index()
{
//
return Book::all();
}
今天讲的东西有点多
希望大家可以吸收
另外
如果对这份sample code有兴趣
可以从我的github下载使用喔!!
ithome laravel sample code
What is Log in backend Log顾名思义就是纪录,通常在Backend当中会将可...
前言 前两天分享了远距工作的好处与挑战,今天针对应用面来谈谈 Scrum 活动如何在远距工作的情况下...
前面介绍许多 State Machine 及 XState 的功能,由於篇幅不多了,今天想跟大家先快...
才刚提到趋势科技去年在 MITRE Engenuity 的 ATT&CK Evaluatio...
现在来更加了解准确度这件事吧! 在前面有讲过 IoU ,它是用来跟标准框比较的准则,当它的值(0~1...