Insert database
- Bài học này sẽ giúp chúng ta chèn thêm dữ liệu vào database (gọi là insert) từ trang view của Admin.
- Nội dung bài học chỉ muốn giúp các bạn hiểu rõ hơn cách thêm dữ liệu vào database, không đề cập đến xử lý dữ liệu nhập, nếu cần thì các bạn xem thêm ở phần validate form nhe.
- Trước tiên ta cần tạo một bảng dữ liệu rỗng như sau bằng phpMyAdmin hoặc Migrate - database, ta tạo table news với các cột như sau:
Chuẩn bị
-
Để thực hiện việc insert dữ liệu vào database ta làm các thao tác sau:
- Tạo view cho trang nhập dữ liệu news_create.blade.php, và đặt trong thư mục /resources/views/admin/
- Tạo một controller điều khiển các hoạt động của trang news, bao gồm: view, insert, update, delete.
- Route điều khiển hiển thị của trang nhập dữ liệu news_create.blade.php.
- Tạo một Model để khai báo, xử lý table khi cần.
Các file xử lý sẽ thuộc cấu trúc sau:
myproject
app
Http
Controllers
Admin
resources
views
admin
routes
Tạo trang insert dữ liệu /resources/views/admin/news_create.blade.php
Vào thư mục /resources/views/admin/ tạo file PHP news_create.blade.php với nội dung sau:
<form method="post" action="/admin/news/store"> @method('PATCH') @csrf <p> <label for="title">Title</label><br> <input type="text" name="title" value=""> </p> <p> <label for="email">Email</label><br> <input type="text" name="email" value=""> </p> <p> <label for="description">Description</label><br> <textarea cols="20" rows="10" name="description"></textarea> </p> <p> <button type="submit">Submit</button> </p> </form>
Tạo Controller điều khiển các hoạt động của trang news.
Ta sử dụng lệnh Artisan để tạo AdminNewsController
, nếu chưa biết cách tạo như thế nào thì bạn cần xem lại bài học về Controller
php artisan make:controller /Admin/AdminNewsController --resource
-
/Admin/AdminNewsController
Admin
: là tên folder sẽ được tạo tự động.AdminNewsController
: là tên file Controller.
--resource
: đây là khai báo tạo file Controller có sẵn nội dung điều khiển.
Kết quả chạy đúng như sau là bạn tạo thành công:
Khi này, kiểm tra trong thư mục Controller /app/Http/Controllers/Admin/ có chứa file AdminNewsController.php vừa tạo với nội dung sau:
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class AdminNewsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
index()
: Điều khiển hiển thị danh sách dữ liệu.create()
: Điều khiển trang insert dữ liệu.store(Request $request)
: Thực hiện việc insert dữ liệu.show($id)
: Hiển thị dữ liệu riêng biệt dựa theo $id.edit($id)
: Hiển thị trang cập nhật dữ liệu.update(Request $request, $id)
: Thực thi việc cập nhật dữ liệu.destroy($id)
: Xóa dữ liệu.
Thêm nội dung Route
Ta thêm vào Route /routes/web.php nội dung sau:
Route::get('/admin/news/create', 'Admin\AdminNewsController@create');
/admin/news/create
: đường dẫn tới trang insert dữ liệu.Admin\AdminNewsController
: thư mụcAdmin
chứa ControllerAdminNewsController
.create
: Đây là functioncreate()
trong ControllerAdminNewsController
.
Thêm nội dung cho function create() của Controller AdminNewsController
để gọi trang view insert:
/** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('/admin/news_create'); }
- Nội dung trên chỉ đơn giản là gọi trang view /admin/news_create
Hiển thị trang view insert:
Gõ đường dẫn http://localhost:82/admin/news/create lên trình duyệt, ta sẽ xem được nội dung sau:
Tiến hành insert dữ liệu
- Trong trang view: insert dữ liệu /resources/views/admin/news_create.blade.php ta cho form khi nhấn submit sẽ thực hiện một action tới /admin/news/store, do đó ta cần tạo một Controller để xử lý lưu dữ liệu nhập, và một Route điều hướng tới Controller này, ta thực hiện như sau:
Điều chỉnh nội dung Route
Ta thêm vào Route /routes/web.php nội dung sau:
Route::get('/admin/news/create', 'Admin\AdminNewsController@create'); Route::post('/admin/news/store', 'Admin\AdminNewsController@store');
/admin/news/store
: đường dẫn tới trang insert dữ liệu.Admin\AdminNewsController
: thư mụcAdmin
chứa ControllerAdminNewsController
.create
: Đây là functioncreate()
trong ControllerAdminNewsController
.
Xử lý Controller
Tiến hành xử lý nội dung insert dữ liệu cho Controller, viết lại Controller /app/Http/Controllers/Admin/AdminNewsController.php tại phần khai báo và public function store(Request $request)
như sau:
<?php namespace App\Http\Controllers\Admin; use App\News; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class AdminNewsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('/admin/news_create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $news = new News; $news->title = $request->title; $news->email = $request->email; $news->description = $request->description; $news->save(); return redirect()->action('Admin\AdminNewsController@create'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
use App\News;
: đây là khai báo Model News khai báo cho table news trong Database.$news = new News;
: Gọi Model News và gán cho biến $news.Tiến hành xử lý dữ liệu từ form (từ thuộc tính name của input):
$news->title = $request->title
$news->email = $request->email
$news->description = $request->description
$news->save()
: save vào table news trong Database.return redirect()->action('Admin\AdminNewsController@create')
: Sau khi thực hiện xong, gọi lạifunction create
của ControllerAdminNewsController
, nội dung fuction này là hiển thị lại trang view insert.
Model News, khai báo table
Tới đây ta gần như hoàn thành việc insert dữ liệu vào Database, thiếu duy nhất là khai báo Model News để nhận biết table nào cần xử lý, ta thực hiện tạo Model news như sau, sử dụng lệnh Artisan để tạo Model News:
php artisan make:model News
Kết quả chạy đúng như sau là bạn tạo thành công:
Khi này, kiểm tra trong thư mục /app/ sẽ thấy file Modal News.php vừa tạo với nội dung sau:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class News extends Model { // }
Ta thực hiện khai báo cho table news trong Database như sau:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class News extends Model
{
protected $table='news';
}
Tới đây là ta đã hoàn thành việc tạo trang insert dữ liệu, ta có thể tiến hanh insert dữ liệu để xem nội dung có được thêm vào table news trong Database hay không.
Kiểm tra table news trong phpMyAdmin hiển thị dữ liệu vừa nhập như sau là thành công:
Nội dung bài học chỉ tập trung vào việc insert dữ liệu vào Database thôi nhe, việc xử lý hay validate form thì các bạn xem thêm tại bài Validate form nhe.