#要件
プロフィールの一部として、価値観ページを作成する。
0~6個までの間で、任意の数投稿できる。
タイトル+本文のみ。
タイトルは、カテゴリーと同じ(admin画面で簡単に登録・削除・編集できるようにする。)
#設計
中間テーブルを用意して、会社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', '削除しました。');
}
}