0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelで会社の価値観投稿機能を作成(0~6個)

Posted at

#要件

プロフィールの一部として、価値観ページを作成する。
0~6個までの間で、任意の数投稿できる。
タイトル+本文のみ。
タイトルは、カテゴリーと同じ(admin画面で簡単に登録・削除・編集できるようにする。)

スクリーンショット 2021-09-13 9.46.17.png

#設計
中間テーブルを用意して、会社IDと本文とタイトルとする。
登録時に、6個だった場合に、制限をかける。

Company_value(pivot)を作成
CompanyとCompany_valueにリレーションを組む
Viewに 投稿済み価値観編集フォーム+価値観投稿フォーム
Controllerに、最大6つまでの制限をかける。

##Company_value(pivot)を作成

..bash
php artisan make:migration create_company_values_table --create=company_values
php artisan make:controller Enterprise/Company_valueController --model=Company_value
php artisan make:migration create_value_categories_table --create=value_categories
php artisan make:controller Enterprise/Value_categoryController --model=Value_category
2021_09_12_112529_create_company_values_table.php
    public function up()
    {
        Schema::create('company_values', function (Blueprint $table) {
            $table->id();
            $table->integer('company_id');
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }
2021_09_13_011707_create_value_categories_table.php
    public function up()
    {
        Schema::create('value_categories', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->timestamps();
        });
    }
..bash

php artisan migrate

##モデルにリレーションを組む

Company.php
    public function company_values()
    {
      return $this->hasMany(Company_value::class);
    }
Company_value.php
    public function company()
    {
      return $this->belongsTo(Company::class);
    }

    public function value_category()
    {
      return $this->belongsTo(Value_category::class);
    }
Value_category.php
    public function company_values()
    {
      return $this->hasMany(Company_value::class);
    }

##Viewに 投稿済み価値観編集フォーム+価値観投稿フォーム

編集フォームblade.php
<p>編集部分投稿済み</p>
    @foreach ($company_values as $i => $company_value)
    <form action="{{ route('enterprise.companies.profile_update') }}" method="POST">
        {{ csrf_field() }}
        <p>No.{{$i+1}}</p>
        <select class="form-control" id="value_category" name="value_category_id" required>
            <option value="" hidden>価値観カテゴリー</option>
            @foreach($value_categories as $value_category)
                @if($company_value->value_category->id === $value_category->id )
                    <option value="{{ $value_category->id }}" selected>{{ $value_category->title }}</option>
                @else
                    <option value="{{ $value_category->id }}">{{ $value_category->title }}</option>
                @endif
            @endforeach
        </select>
        
        <textarea class="form-control" name="body" id="exampleFormControlTextarea1" rows="3">{{$company_value->body}}</textarea>

        <input type="hidden" name="company_value_id" value="{{ $company_value->id }}">
        <input type="submit" value="更新" class="t-btn">
    </form>
    <form action="{{ route('enterprise.companies.profile_destroy') }}" method="POST">
        {{ csrf_field() }}
        <input type="hidden" name="company_value_id" value="{{ $company_value->id }}">
        <input type="submit" value="削除" class="btn btn-danger post_del_btn" onclick="return confirm('削除しますか ?');">
    </form>
    @endforeach
新規フォームblade.php
//6つ以上の価値観は作成できないように、フォームを非表示にする。
@if( count($company->company_values) < 6)
<p>新規投稿部分</p>
<form action="{{ route('enterprise.companies.profile_create') }}" method="POST">
    {{ csrf_field() }}
    <select class="form-control" id="value_category" name="value_category_id" required>
        <option value="" hidden>価値観カテゴリー</option>
        @foreach($value_categories as $value_category)
            <option value="{{ $value_category->id }}">{{ $value_category->title }}</option>
        @endforeach
        {{-- <option value="{{ $value_category->id }}" selected>{{ $value_category->title }}</option> --}}
    </select>
    
    <textarea class="form-control" name="body" id="exampleFormControlTextarea1" rows="3"></textarea>
    
    <input type="submit" value="登録" class="t-btn">
 </form>
 @endif

Controllerに、最大6つまでの制限をかける。

Company_valueController.php
class Company_valueController extends Controller
{
    public function profile_edit()
    {
        $companyId = session('company');
        $company = Company::find($companyId);

        $value_categories = Value_category::all();
        $company_values = $company->company_values;

        return view('enterprise.companies.profile_edit',compact('company','value_categories','company_values'));
    }

    public function profile_create(Request $request){

        $companyId = session('company');
        $company = Company::find($companyId);

        if( count($company->company_values) >= 6){
            return redirect()->back()->with('flash_message', '登録可能な価値観は最大6つまでです。');
        
        }else{
            $comapny_value = new Company_value();
            $comapny_value->company_id = $companyId;
            $comapny_value->value_category_id = $request->value_category_id;
            $comapny_value->body = $request->body;
            $comapny_value->save();

            return redirect()->back()->with('flash_message', '価値観を新規登録しました。');
        }
    }

    public function profile_update(Request $request){
        $companyId = session('company');
        $company = Company::find($companyId);

        $comapny_value = Company_value::find($request->company_value_id);
        $comapny_value->value_category_id = $request->value_category_id;
        $comapny_value->body = $request->body;
        $comapny_value->save();

        return redirect()->back()->with('flash_message', '価値観を更新しました。');

    }

    public function profile_destroy(Request $request){

        $comapny_value = Company_value::find($request->company_value_id);
        $comapny_value->delete();

        return redirect()->back()->with('flash_message', '削除しました。');

    }
   
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?