LALAVEL 8 CRUD操作チュートリアルと初心者のための例


もともと投稿@https://codeanddeploy.com サンプルコードをダウンロードしてダウンロードしますhttps://codeanddeploy.com/blog/laravel/laravel-8-crud-operation-tutorial-and-example-for-beginners
このポストでは、私は単純なララビル8 CRUD(作成、読み取り、更新、および削除)操作をステップバイステップガイド初心者を助けることができる例を共有します.Laravelアプリケーションを開発する場合は、最初に基本的な方法を知る必要があります.それは初心者のフレンドリーガイドです心配しないでください.




ログインと登録がないならば、あなたは私の以前のチュートリアルに続くことができますLaravel 8 authentication.

ステップ1:ラーラーベル8クラッドインストール


LALAVEL CRUDチュートリアルを起動するには、まずLALAVEL 8を最初にインストールする必要があります.Laravel 8をローカルにインストールしていない場合は、以下のコマンドを実行します.
composer create-project --prefer-dist laravel/laravel crud
または私の以前のチュートリアルのクローンauthentication すでにラーラーベル8で.
xamppを使っているなら、それをダウンロードしてhtdocsフォルダに置いてください.次に、次のコマンドを実行します.
composer update
上で実行したら、次のコマンドを実行します.
composer require laravelcollective/html

ステップ2:データベース構成


あなたのLaravelプロジェクトが新鮮な場合は、データベースの資格情報を更新する必要があります.ジャスト・オープン.env Laravel 8プロジェクトのファイル..env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name_here
DB_USERNAME=your_database_username_here
DB_PASSWORD=your_database_password_here

ステップ3 :移行設定


Laravel 8 CRUD操作のためのマイグレーションを作りましょう.あなたが新鮮なLaravelプロジェクトを使用しているならば、私は私の認証でusername分野を加えたので、ユーザーのテーブルをカスタマイズする必要があります.以下は完全な移行です.
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->string('email')->unique();
            $table->string('username')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}
次のコマンドを実行します.
php artisan migrate

ステップ4:ララベルクルーズ作戦ルート


私の例では、手動でlaravel CRUDルートを作成します.「ルート/web . php」ファイルを開き、次のルートを追加します.


Route::group(['namespace' => 'App\Http\Controllers'], function()
{   

    /**
    * User Routes
    */
    Route::group(['prefix' => 'users'], function() {
            Route::get('/', 'UsersController@index')->name('users.index');
            Route::get('/create', 'UsersController@create')->name('users.create');
            Route::post('/create', 'UsersController@store')->name('users.store');
            Route::get('/{user}/show', 'UsersController@show')->name('users.show');
            Route::get('/{user}/edit', 'UsersController@edit')->name('users.edit');
            Route::patch('/{user}/update', 'UsersController@update')->name('users.update');
            Route::delete('/{user}/delete', 'UsersController@destroy')->name('users.destroy');
    });
});

ステップ5:ララヴィルCRUDの例のためのコントローラを作成します


では、以下のコマンドを実行してください.
php artisan make:controller UsersController
上記のコマンドを実行した後、あなたは“アプリ/HTTP/コントローラ”に生成されたコントローラを見つけるでしょう.Laravel CRUD操作例のためのメソッドを追加しましょう.我々は簡単な例でこれを行うには、ユーザーを使用していることに注意してください.
ユーザコントローラには以下のメソッドがあります:
  • index ()
  • create ()
  • store ()
  • show ()
  • edit ()
  • update ()
  • destroy ()
  • laravel 8で作成、読み込み、更新、削除操作を完了する7つのメソッド.
    以下に、ユーザコントローラの完全なコードを示します.
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\User;
    use Illuminate\Http\Request;
    use App\Http\Requests\StoreUserRequest;
    use App\Http\Requests\UpdateUserRequest;
    
    class UsersController extends Controller
    {
        /**
         * Display all users
         * 
         * @return \Illuminate\Http\Response
         */
        public function index() 
        {
            $users = User::latest()->paginate(10);
    
            return view('users.index', compact('users'));
        }
    
        /**
         * Show form for creating user
         * 
         * @return \Illuminate\Http\Response
         */
        public function create() 
        {
            return view('users.create');
        }
    
        /**
         * Store a newly created user
         * 
         * @param User $user
         * @param StoreUserRequest $request
         * 
         * @return \Illuminate\Http\Response
         */
        public function store(User $user, StoreUserRequest $request) 
        {
            //For demo purposes only. When creating user or inviting a user
            // you should create a generated random password and email it to the user
            $user->create(array_merge($request->validated(), [
                'password' => 'test' 
            ]));
    
            return redirect()->route('users.index')
                ->withSuccess(__('User created successfully.'));
        }
    
        /**
         * Show user data
         * 
         * @param User $user
         * 
         * @return \Illuminate\Http\Response
         */
        public function show(User $user) 
        {
            return view('users.show', [
                'user' => $user
            ]);
        }
    
        /**
         * Edit user data
         * 
         * @param User $user
         * 
         * @return \Illuminate\Http\Response
         */
        public function edit(User $user) 
        {
            return view('users.edit', [
                'user' => $user
            ]);
        }
    
        /**
         * Update user data
         * 
         * @param User $user
         * @param UpdateUserRequest $request
         * 
         * @return \Illuminate\Http\Response
         */
        public function update(User $user, UpdateUserRequest $request) 
        {
            $user->update($request->validated());
    
            return redirect()->route('users.index')
                ->withSuccess(__('User updated successfully.'));
        }
    
        /**
         * Delete user data
         * 
         * @param User $user
         * 
         * @return \Illuminate\Http\Response
         */
        public function destroy(User $user) 
        {
            $user->delete();
    
            return redirect()->route('users.index')
                ->withSuccess(__('User deleted successfully.'));
        }
    }
    

    セットアップユーザモデル


    親切に、私のユーザーモデルの下を見てください.
    <?php
    
    namespace App\Models;
    
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Notifications\Notifiable;
    use Laravel\Sanctum\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens, HasFactory, Notifiable;
    
        /**
         * The database table used by the model.
         *
         * @var string
         */
        protected $table = 'users';
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name',
            'email',
            'username',
            'password',
        ];
    
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password',
            'remember_token',
        ];
    
        /**
         * The attributes that should be cast to native types.
         *
         * @var array
         */
        protected $casts = [
            'email_verified_at' => 'datetime',
        ];
    
        /**
         * Always encrypt password when it is updated.
         *
         * @param $value
         * @return string
         */
        public function setPasswordAttribute($value)
        {
            $this->attributes['password'] = bcrypt($value);
        }
    }
    

    ステップ7:ララベルクラッドのブレードファイルを追加


    この最後のステップでは、ララヴィルのCRUD例を表示するためにレイアウトとブレードを追加します.
    この例では、以下のファイルを持っています.
    レイアウト/アプリマスター.ブレード.PHP
    レイアウト/パーティション/Navbar.ブレード.PHP
    レイアウト/パーティション/メッセージ.ブレード.PHP
    ユーザ/作成.ブレード.PHP
    ユーザー/編集.ブレード.PHP
    ユーザー/インデックス.ブレード.PHP
    ユーザー/ショー.ブレード.PHP
    上記のコードの下記を参照.
    リソース/ビュー/レイアウト/アプリケーションマスター.ブレード.PHP
    <!doctype html>
    <html lang="en">
        <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
        <meta name="generator" content="Hugo 0.87.0">
        <title>Fixed top navbar example · Bootstrap v5.1</title>
    
        <!-- Bootstrap core CSS -->
        <link href="{!! url('assets/bootstrap/css/bootstrap.min.css') !!}" rel="stylesheet">
    
        <style>
          .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
          }
    
          @media (min-width: 768px) {
            .bd-placeholder-img-lg {
              font-size: 3.5rem;
            }
          }
    
          .float-right {
            float: right;
          }
        </style>
    
    
        <!-- Custom styles for this template -->
        <link href="{!! url('assets/css/app.css') !!}" rel="stylesheet">
    </head>
    <body>
    
        @include('layouts.partials.navbar')
    
        <main class="container mt-5">
            @yield('content')
        </main>
    
        <script src="{!! url('assets/bootstrap/js/bootstrap.bundle.min.js') !!}"></script>
    
      </body>
    </html>
    
    リソース/ビュー/レイアウト/パーティション/Navbar.ブレード.PHP
    <header class="p-3 bg-dark text-white">
      <div class="container">
        <div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
          <a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
            <svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap"><use xlink:href="#bootstrap"/></svg>
          </a>
    
          <ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
            <li><a href="{{ route('home.index') }}" class="nav-link px-2 text-white">Home</a></li>
            @auth
              <li><a href="{{ route('users.index') }}" class="nav-link px-2 text-white">Users</a></li>
            @endauth
          </ul>
    
          <form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3">
            <input type="search" class="form-control form-control-dark" placeholder="Search..." aria-label="Search">
          </form>
    
          @auth
            {{auth()->user()->name}}&nbsp;
            <div class="text-end">
              <a href="{{ route('logout.perform') }}" class="btn btn-outline-light me-2">Logout</a>
            </div>
          @endauth
    
          @guest
            <div class="text-end">
              <a href="{{ route('login.perform') }}" class="btn btn-outline-light me-2">Login</a>
              <a href="{{ route('register.perform') }}" class="btn btn-warning">Sign-up</a>
            </div>
          @endguest
        </div>
      </div>
    </header>
    
    リソース/ビュー/レイアウト/パーティション/メッセージ.ブレード.PHP
    @if(Session::get('success', false))
        <?php $data = Session::get('success'); ?>
        @if (is_array($data))
            @foreach ($data as $msg)
                <div class="alert alert-success" role="alert">
                    <i class="fa fa-check"></i>
                    {{ $msg }}
                </div>
            @endforeach
        @else
            <div class="alert alert-success" role="alert">
                <i class="fa fa-check"></i>
                {{ $data }}
            </div>
        @endif
    @endif
    
    リソース/ビュー/ユーザー/インデックス.ブレード.PHP
    @extends('layouts.app-master')
    
    @section('content')
        <div class="bg-light p-4 rounded">
            <h1>Users</h1>
            <div class="lead">
                Manage your users here.
                <a href="{{ route('users.create') }}" class="btn btn-primary btn-sm float-right">Add new user</a>
            </div>
    
            <div class="mt-2">
                @include('layouts.partials.messages')
            </div>
    
            <table class="table table-striped">
                <thead>
                <tr>
                    <th scope="col" width="1%">#</th>
                    <th scope="col" width="15%">Name</th>
                    <th scope="col">Email</th>
                    <th scope="col" width="10%">Username</th>
                    <th scope="col" width="1%" colspan="3"></th>    
                </tr>
                </thead>
                <tbody>
                    @foreach($users as $user)
                        <tr>
                            <th scope="row">{{ $user->id }}</th>
                            <td>{{ $user->name }}</td>
                            <td>{{ $user->email }}</td>
                            <td>{{ $user->username }}</td>
                            <td><a href="{{ route('users.show', $user->id) }}" class="btn btn-warning btn-sm">Show</a></td>
                            <td><a href="{{ route('users.edit', $user->id) }}" class="btn btn-info btn-sm">Edit</a></td>
                            <td>
                                {!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}
                                {!! Form::submit('Delete', ['class' => 'btn btn-danger btn-sm']) !!}
                                {!! Form::close() !!}
                            </td>
                        </tr>
                    @endforeach
                </tbody>
            </table>
    
            <div class="d-flex">
                {!! $users->links() !!}
            </div>
    
        </div>
    @endsection
    
    リソース/ビュー/ユーザー/作成.ブレード.PHP
    @extends('layouts.app-master')
    
    @section('content')
        <div class="bg-light p-4 rounded">
            <h1>Add new user</h1>
            <div class="lead">
                Add new user and assign role.
            </div>
    
            <div class="container mt-4">
                <form method="POST" action="">
                    @csrf
                    <div class="mb-3">
                        <label for="name" class="form-label">Name</label>
                        <input value="{{ old('name') }}" 
                            type="text" 
                            class="form-control" 
                            name="name" 
                            placeholder="Name" required>
    
                        @if ($errors->has('name'))
                            <span class="text-danger text-left">{{ $errors->first('name') }}</span>
                        @endif
                    </div>
                    <div class="mb-3">
                        <label for="email" class="form-label">Email</label>
                        <input value="{{ old('email') }}"
                            type="email" 
                            class="form-control" 
                            name="email" 
                            placeholder="Email address" required>
                        @if ($errors->has('email'))
                            <span class="text-danger text-left">{{ $errors->first('email') }}</span>
                        @endif
                    </div>
                    <div class="mb-3">
                        <label for="username" class="form-label">Username</label>
                        <input value="{{ old('username') }}"
                            type="text" 
                            class="form-control" 
                            name="username" 
                            placeholder="Username" required>
                        @if ($errors->has('username'))
                            <span class="text-danger text-left">{{ $errors->first('username') }}</span>
                        @endif
                    </div>
    
                    <button type="submit" class="btn btn-primary">Save user</button>
                    <a href="{{ route('users.index') }}" class="btn btn-default">Back</a>
                </form>
            </div>
    
        </div>
    @endsection
    
    リソース/ビュー/ユーザー/ショー.ブレード.PHP
    @extends('layouts.app-master')
    
    @section('content')
        <div class="bg-light p-4 rounded">
            <h1>Show user</h1>
            <div class="lead">
    
            </div>
    
            <div class="container mt-4">
                <div>
                    Name: {{ $user->name }}
                </div>
                <div>
                    Email: {{ $user->email }}
                </div>
                <div>
                    Username: {{ $user->username }}
                </div>
            </div>
    
        </div>
        <div class="mt-4">
            <a href="{{ route('users.edit', $user->id) }}" class="btn btn-info">Edit</a>
            <a href="{{ route('users.index') }}" class="btn btn-default">Back</a>
        </div>
    @endsection
    
    リソース/ビュー/ユーザー/編集.ブレード.PHP
    @extends('layouts.app-master')
    
    @section('content')
        <div class="bg-light p-4 rounded">
            <h1>Update user</h1>
            <div class="lead">
    
            </div>
    
            <div class="container mt-4">
                <form method="post" action="{{ route('users.update', $user->id) }}">
                    @method('patch')
                    @csrf
                    <div class="mb-3">
                        <label for="name" class="form-label">Name</label>
                        <input value="{{ $user->name }}" 
                            type="text" 
                            class="form-control" 
                            name="name" 
                            placeholder="Name" required>
    
                        @if ($errors->has('name'))
                            <span class="text-danger text-left">{{ $errors->first('name') }}</span>
                        @endif
                    </div>
                    <div class="mb-3">
                        <label for="email" class="form-label">Email</label>
                        <input value="{{ $user->email }}"
                            type="email" 
                            class="form-control" 
                            name="email" 
                            placeholder="Email address" required>
                        @if ($errors->has('email'))
                            <span class="text-danger text-left">{{ $errors->first('email') }}</span>
                        @endif
                    </div>
                    <div class="mb-3">
                        <label for="username" class="form-label">Username</label>
                        <input value="{{ $user->username }}"
                            type="text" 
                            class="form-control" 
                            name="username" 
                            placeholder="Username" required>
                        @if ($errors->has('username'))
                            <span class="text-danger text-left">{{ $errors->first('username') }}</span>
                        @endif
                    </div>
    
                    <button type="submit" class="btn btn-primary">Update user</button>
                    <a href="{{ route('users.index') }}" class="btn btn-default">Cancel</button>
                </form>
            </div>
    
        </div>
    @endsection
    
    追加:
    アプリケーション\プロバイダー\AppServiceProviderクラスでは、bootstrapパラメータをサポートするために、boot ()関数の中に以下のコードを追加する必要があります.
    Paginator::useBootstrap();
    
    コンプリートコード
    <?php
    
    namespace App\Providers;
    
    use Illuminate\Pagination\Paginator;
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            Paginator::useBootstrap();
        }
    }
    
    ここでララベル8であなたのCRUD (作成、読み込み、更新、削除)を行います.テストして次のコマンドを実行します.
    php artisan serve
    
    
    次に、ブラウザにこのURLを移動します.
    http://localhost:8000/users
    
    私はこのチュートリアルを助けることを望む.どうぞこちらへhttps://codeanddeploy.com/blog/laravel/laravel-8-crud-operation-tutorial-and-example-for-beginners このコードをダウンロードしたい場合.
    ハッピーコーディング