タグ登録機能の追加
This commit is contained in:
parent
d7b16cd6d5
commit
b1dcc36565
@ -22,4 +22,9 @@ class Ejaculation extends Model
|
||||
{
|
||||
return $this->belongsTo('App\User');
|
||||
}
|
||||
|
||||
public function tags()
|
||||
{
|
||||
return $this->belongsToMany('App\Tag')->withTimestamps();
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Tag;
|
||||
use App\User;
|
||||
use Carbon\Carbon;
|
||||
use Validator;
|
||||
@ -28,6 +29,7 @@ class EjaculationController extends Controller
|
||||
'time' => 'required|date_format:H:i',
|
||||
'note' => 'nullable|string|max:500',
|
||||
'link' => 'nullable|url',
|
||||
'tags' => 'nullable|string',
|
||||
])->after(function ($validator) use ($request, $inputs) {
|
||||
// 日時の重複チェック
|
||||
if (!$validator->errors()->hasAny(['date', 'time'])) {
|
||||
@ -46,6 +48,15 @@ class EjaculationController extends Controller
|
||||
'is_private' => $request->has('is_private') ?? false
|
||||
]);
|
||||
|
||||
$tags = explode(' ', $inputs['tags']);
|
||||
$tagIds = [];
|
||||
foreach ($tags as $tag) {
|
||||
$tag = Tag::firstOrCreate(['name' => $tag]);
|
||||
$tagIds[] = $tag->id;
|
||||
}
|
||||
|
||||
$ejaculation->tags()->sync($tagIds);
|
||||
|
||||
return redirect()->route('checkin.show', ['id' => $ejaculation->id])->with('status', 'チェックインしました!');
|
||||
}
|
||||
|
||||
@ -115,6 +126,7 @@ class EjaculationController extends Controller
|
||||
{
|
||||
$ejaculation = Ejaculation::findOrFail($id);
|
||||
$user = User::findOrFail($ejaculation->user_id);
|
||||
$ejaculation->tags()->detach();
|
||||
$ejaculation->delete();
|
||||
return redirect()->route('user.profile', ['name' => $user->name])->with('status', '削除しました。');
|
||||
}
|
||||
|
19
app/Tag.php
Normal file
19
app/Tag.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Tag extends Model
|
||||
{
|
||||
//
|
||||
|
||||
protected $fillable = [
|
||||
'name'
|
||||
];
|
||||
|
||||
public function ejaculations()
|
||||
{
|
||||
return $this->belongsToMany('App\Ejaculation')->withTimestamps();
|
||||
}
|
||||
}
|
40
database/migrations/2018_01_08_075844_create_tags_table.php
Normal file
40
database/migrations/2018_01_08_075844_create_tags_table.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateTagsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('tags', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('name');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('ejaculation_tag', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('ejaculation_id')->index();
|
||||
$table->integer('tag_id')->index();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('tags');
|
||||
Schema::dropIfExists('ejaculation_tag');
|
||||
}
|
||||
}
|
@ -36,7 +36,7 @@
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group col-sm-12">
|
||||
<input name="tags" type="hidden">
|
||||
<input name="tags" type="hidden" value="{{ old('tags') }}">
|
||||
<label for="tagInput"><span class="oi oi-tags"></span> タグ</label>
|
||||
<div class="form-control {{ $errors->has('tags') ? ' is-invalid' : '' }}">
|
||||
<ul id="tags" class="list-inline d-inline"></ul>
|
||||
@ -112,6 +112,16 @@
|
||||
.join(' ')
|
||||
);
|
||||
}
|
||||
function insertTag(value) {
|
||||
$('#tags').append('<li class="list-inline-item badge badge-primary" style="cursor: pointer;" data-value="' + value + '"><span class="oi oi-tag"></span> ' + value + ' | x</li>');
|
||||
}
|
||||
var initTags = $('input[name=tags]').val();
|
||||
if (initTags.trim() !== '') {
|
||||
initTags.split(' ').forEach(function (value) {
|
||||
insertTag(value);
|
||||
});
|
||||
}
|
||||
|
||||
$('#tagInput').on('keydown', function (ev) {
|
||||
var $this = $(this);
|
||||
if ($this.val().trim() !== '') {
|
||||
@ -119,7 +129,7 @@
|
||||
case 'Tab':
|
||||
case 'Enter':
|
||||
case ' ':
|
||||
$('#tags').append('<li class="list-inline-item badge badge-primary" style="cursor: pointer;" data-value="' + $this.val().trim() + '">' + $this.val().trim() + ' | x</li>');
|
||||
insertTag($this.val().trim());
|
||||
$this.val('');
|
||||
updateTags();
|
||||
ev.preventDefault();
|
||||
|
@ -34,15 +34,14 @@
|
||||
@endif
|
||||
</div>
|
||||
<!-- tags -->
|
||||
@if ($ejaculation->is_private) {{-- TODO: タグを付けたら、タグが空じゃないかも判定に加える --}}
|
||||
@if ($ejaculation->is_private || $ejaculation->tags->isNotEmpty())
|
||||
<p class="mb-2">
|
||||
@if ($ejaculation->is_private)
|
||||
<span class="badge badge-warning"><span class="oi oi-lock-locked"></span> 非公開</span>
|
||||
@endif
|
||||
{{--
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> 催眠音声</span>
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> 適当なタグ</span>
|
||||
--}}
|
||||
@foreach ($ejaculation->tags as $tag)
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> {{ $tag->name }}</span>
|
||||
@endforeach
|
||||
</p>
|
||||
@endif
|
||||
<!-- okazu link -->
|
||||
|
@ -20,15 +20,14 @@
|
||||
@endif
|
||||
</div>
|
||||
<!-- tags -->
|
||||
@if ($ejaculation->is_private) {{-- TODO: タグを付けたら、タグが空じゃないかも判定に加える --}}
|
||||
@if ($ejaculation->is_private || $ejaculation->tags->isNotEmpty())
|
||||
<p class="mb-2">
|
||||
@if ($ejaculation->is_private)
|
||||
<span class="badge badge-warning"><span class="oi oi-lock-locked"></span> 非公開</span>
|
||||
@endif
|
||||
{{--
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> 催眠音声</span>
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> 適当なタグ</span>
|
||||
--}}
|
||||
@foreach ($ejaculation->tags as $tag)
|
||||
<span class="badge badge-secondary"><span class="oi oi-tag"></span> {{ $tag->name }}</span>
|
||||
@endforeach
|
||||
</p>
|
||||
@endif
|
||||
<!-- okazu link -->
|
||||
|
Loading…
Reference in New Issue
Block a user