Laravel7 DBからデータを取得操作の一覧
Laravel7でDBからデータを取得する操作の例を幾つか記述してます。ここでは DBにMysqlベースのPercona Serverを使用してます。
環境
- OS CentOS Linux release 8.0.1905 (Core)
- Composer 1.10.5
- PHP 7.4.5
- Percona Server Ver 8.0.19-10
- Laravel Framework 7.6.2
※CentOs8に Laravel のインストールはこちら
※CentOs8 に Percona Server のインストールはこちら
構成
テストデータの作成やフロントへの表示までの手順は長いので後述してます。
テーブル名 : employees
テストデータ
モデル名 : app/Employee.php
コントローラー名 : app/Http/Controllers/EmployeeController.php
全データ取得
all()やget()を利用すると全データが取得可能です。
$employees = Employee::all();
$employees = Employee::get();
実行結果
指定したIDだけ取得
Laravelではカラム「id」を利用していることが前提なので、下記のコードでid 1,5のデータだけ取得することが可能です
$employees = Employee::find([1, 5]);
実行結果
Where句を利用して取得
下記のようにwhere句を利用して取得することも可能です。
ここではidが3以下のデータだけを取得してます。
$employees = Employee::where('id','<=', '5')->get();
実行結果
「and」も可能です。
$employees = Employee::where('id', 1)->where('code', 1314)->get();
実行結果
「or」だと下記になります。
$employees = Employee::where('id', 1)->orwhere('name', '高橋 陽子')->get();
実行結果
「like」だと下記になります。
$employees = Employee::where('name', 'like', '%高%')->get();
実行結果
「Between」だと下記になります。
$employees = Employee::whereBetween('code', [1, 100])->get();
実行結果
特定カラムのみ取得
特定のカラムだけを取得することも可能です。
ここでは、カラム「’id’, ‘code’, ‘name’, ‘role’」のみを取得してます。
$employees = Employee::select('id', 'code', 'name', 'role')->get();
実行結果
asも利用できます。
$employees = Employee::select('id', 'code as name', 'name as code', 'role')->get();
実行結果
下記からは、テストデータの作成方法とフロントへの反映の手順となります。
テストデータ作成
「Faker」を利用してテストデータを作成します。手順は簡易的に記述します。
php artisan make:model Employee -m
app/Employee.phpを編集
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Employee extends Model
{
protected $fillable = [
'code',
'name',
'password',
'role'
];
}
sample/database/migrations/xxxx_create_employees_table.php 編集
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateEmployeesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('employees', function (Blueprint $table) {
$table->id();
$table->text('code');
$table->text('name');
$table->text('password');
$table->text('role');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('employees');
}
}
マイグレーションを実行します。
php artisan migrate
seeder作成
php artisan db:seed --class=EmployeesSeeder
database/seeds/EmployeeSeeder.php 編集
<?php
use Illuminate\Database\Seeder;
use App\Employee;
class EmployeeSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
for( $cnt = 1; $cnt <= 50; $cnt++ ) {
$faker = Faker\Factory::create('ja_JP');
Employee::create([
'code' => $faker->randomNumber(),
'name' => $faker->lastName. ' ' . $faker->firstName,
'password' => Hash::make('password'),
'role' => $faker->randomDigitNotNull
]);
}
}
}
seeder実行
composer dump-autoload
php artisan db:seed --class=EmployeeSeeder
フロント側作成
コントローラー作成
php artisan make:controller EmployeeController --resource
app/Http/Controllers/EmployeeController.php 編集
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Employee;
class EmployeeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$employees = Employee::get();
return view('employee.index', compact('employees'));
}
/**
* 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)
{
//
}
}
resources/views/layout.blade.php 作成(共通レイアウト)
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
<!-- bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 200;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
justify-content: center;
}
.position-ref {
position: relative;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
}
.content {
text-align: center;
}
.title {
font-size: 84px;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 13px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
<div class="title m-b-md">
mebee
</div>
<div>
@yield('content')
</div>
</div>
</div>
</body>
</html>
resources/views/employee/index.blade.php 作成
@extends('layout')
@section('content')
<h2>従業員一覧</h2>
<table class="table">
<thead>
<tr>
<th>id</th>
<th>code</th>
<th>name</th>
<th>role</th>
</tr>
</thead>
<tbody>
@foreach ($employees as $employee)
<tr>
<td>{{ $employee->id }}</td>
<td>{{ $employee->code }}</td>
<td>{{ $employee->name }}</td>
<td>{{ $employee->role }}</td>
</tr>
@endforeach
</tbody>
</table>
@endsection
routes/web.php 下記1行追加
Route::resource('/employee', 'EmployeeController');
実行
php artisan serve
-
前の記事
Laravel7 CRUD (作成・読み込み・編集・削除) 機能があるタスクリストを実装する手順 2020.06.24
-
次の記事
Postfixのバージョン確認方法 2020.06.24
コメントを書く