1週間でお問い合わせが73件ありました。

✉️FIELDにお問い合わせ

アプリケーション開発

php8.1からひょこっと現れたenumはlaravelで必須ですよ

例えば、もう大体modelが出来上がっているときに、

自分がお気に入りをした求人の一覧ページを

作るということを例にenumを説明していきましょう。

まずはroutingから

Route::group([
    'namespace'     => 'App\\Http\\Controllers\\User',
    'as'            => 'user.',
    'middleware'    => 'user.init_common_resource'
], function (Router $router) {
// マイページ
    $router->controller(MypageController::class)->prefix('mypage')->as('mypage.')->middleware('user.auth')->group(function (Router $router) {
        $router->get('/', 'index')->name('home');
        $router->namespace('MyPage')->group(function (Router $router) {
            $router->controller(LikeController::class)->as('like.')->group(function (Router $router) {
                $router->get('/like', 'index')->name('index');
            });
        });
 });

まぁこんな感じで、user.mypage.like.indexを作りました。

というわけで、 コントローラーを作っていきます。

mypage/like/index.blade.phpに

@extends('user.layout.app')

@section('content')
//ここに一覧のコード書く
@endsection

$likejobsを展開して求人カセットを表示するようにしたいので、

コントローラーの方で、

$likejobsを取得していきます。

が、その前にserviceでデータを取得するためにserviceを作ります。

<?php

namespace App\\Services\\User;

use App\\Models\\KeptJob;
use App\\Models\\User;
use App\\Repositories\\User\\Job\\JobRepositoryInterface;
use App\\Repositories\\User\\KeptJob\\KeptJobRepositoryInterface;
use App\\Repositories\\User\\UserRepositoryInterface;
use Exception;
use Illuminate\\Support\\Collection;

class JobService
{
    private $jobRepository;

    private $keptJobRepository;

    private $userRepository;

    public function __construct(
        JobRepositoryInterface $jobRepository,
        KeptJobRepositoryInterface $keptJobRepository,
        UserRepositoryInterface $userRepository
    ) {
        $this->jobRepository = $jobRepository;
        $this->keptJobRepository = $keptJobRepository;
        $this->userRepository = $userRepository;
    }

    }
    /**
     * キープ求人取得
     *
     * @param integer $userId
     * @param integer $jobId
     * @return object
     */
    public function getKeepJobs(int $userId)
    {
        return KeptJob::where('user_id', $userId)->get();
    }
}

ここのgetKeepJobsでmodelから取ってきます。

ちなみに、modelとして、

use App\Models\KeptJob;を読み込んでいるのですが、

ここでjobテーブルにbelongToしています。

そしてそのjobテーブルを見ると。

<?php

namespace App\\Models;

use App\\Enums\\EmploymentType;
use App\\Enums\\JobCategory;
use App\\Enums\\JobStatus;
use App\\Enums\\SalaryType;
use Illuminate\\Database\\Eloquent\\Builder;
use Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;

class Job extends BaseModel
{
    protected $table = 'jobs';

    protected $casts = [
        'job_category' => JobCategory::class,
        'employment_type' => EmploymentType::class,
        'salary_type' => SalaryType::class,
        'status' => JobStatus::class,
    ];

    protected $fillable = [
        'f_job_id',
        'nursery_id',
        'job_category',
        'employment_type',
        'title',
        'salary_type',
        'salary_bottom',
        'salary_high',
        'start_date',
        'end_date',
        'status',
    ];

enum読み込んでるううーー!!!

use App\Enums\EmploymentType;って読み込んでるーー!!!

というわけで、

これを見てみましょう。

app/Enum/EmploymentType.phpは、

<?php

declare(strict_types=1);

namespace App\\Enums;

enum EmploymentType: int
{
    case Unknown    = 0;
    case Fulltime   = 1;
    case PartTime   = 2;
    case Contract   = 3;
    case Dispatch   = 4;
    case TempToPerm = 5;

    /**
     * 雇用形態の名前を取得
     *
     * @return string
     */
    public function text(): string
    {
        return match ($this) {
            self::Unknown    => '不明',
            self::Fulltime   => '正社員',
            self::PartTime   => 'パート・アルバイト',
            self::Contract   => '契約社員',
            self::Dispatch   => '派遣',
            self::TempToPerm => '紹介予定派遣',
        };
    }
}

と、定義してあります。

こう定義しておくと

→text()でキーから文字列を表示してくれるようになります。

どういうことかというと・・。

まずコントローラーを見ましょう。

<?php

namespace App\\Http\\Controllers\\User\\Mypage;

use App\\Http\\Controllers\\User\\BaseController;
use App\\Http\\Requests\\User\\Password\\UpdatePasswordRequest;
use App\\Services\\User\\UserService;
use App\\Services\\User\\JobService;

class LikeController extends BaseController
{
  protected $userService;

  public function __construct(
    UserService $userService,
    JobService $jobService
  ) {
    $this->userService = $userService;
    $this->jobService = $jobService;
  }

  public function index()
  {
    $user = $this->user();

    $likeJobs = $this->jobService->getKeepJobs($user->id);
    return view('user.mypage.like.index', compact('likeJobs'));
  }
}

はい、これはもうviewを見るしかないですよね。

では、問題の場所を見てみましょう。

@foreach($likeJobs as $likejob)

  @foreach($likejob->job->nursery->facilityTypes as $facility)
    <li class="top_pickup_item">{{$facility->name}}</li>
  @endforeach
  <li class="top_pickup_item">{{$likejob->job->employment_type->text()}}</li>
  {{$likejob->job->title}}
  {{$likejob->job->nursery->prefecture->name}}<br>
  {{$likejob->job->nursery->city->name}}{{$likejob->job->nursery->street_address}}
     
@endforeach

ここで、

コントローラーでlikejobを渡してるのでそれをオブジェクトとして使ってるのはいいとして、

見るべきは

{{$likejob->job->employment_type->text()}}

です。

$likejobがbelongToしてjobテーブルの中でemploy_typeがありますが、 それをEnumで定義してるので→text()と書くだけで、文字の状態にして表示してくれます。

すごいね


ちなみにこのコードはN+1問題があるので次のブログで解決していきます

余談ですが
今はlaravel10です。
その基本的な構築はこちらの記事で解説してます。

Yamamoto Yuya

プロフェッショナルとしての高いスキルと知識を持ち、誠実さと責任感を大切にする。常に向上心を持ち、新たな挑戦にも積極的に取り組む努力家。

  • laravel11を使ってwebサービス開発するための入門解説

    目次これを見て自分もで基本的な流れを解説しながらマッチングアプリを作ってみようかなと思いましたまずは

    • #laravel
  • はじめてのLaravel10開発入門[環境構築から実装まで解説]

    こんにちは月岡ですですがの方はこちら今我々はちょっくらバンコクでも旅行しながら仕事でもしててくれとい

    • #laravel
  • オフショアの品質がやばいのはN+1問題があるからです←こうやって解決する

    オフショア関係なく事業部側が制作側にどういう指示を出したらうまく作ってくれるんだろうって思うことあり

    • #laravel
  • Laravelとhorizon-supervisorの解説(redis落ちたら終わり^^b)

    のキュにを入れる方法を記載していきますの作成と実行の流れまずコンテナに入りを実行しましょうそうすると

    • #laravel
    • #redis
    • #horizon
  • Laravelのapiの作り方とserviceとrepositoryの使い方とか5分で学べる。

    これを知りたいという人多いですよねこれまでのブログでの簡単な扱い方としてのやの読み込みを使ったやその

    • #laravel
  • Laravel-adminをたんざらし食べながら解説

    東中野にたんざらしという牛タンの名店ありまぁ弊社がやってるんですけどね弊社は時々福利厚生で黒毛和牛を

    • #laravel