Передача логического значения из флажка в форме Laravel 5.8
Я пытаюсь сохранить логическое значение при создании нового сообщения, а затем обновить его, если я обновляю сообщение. Когда я создаю новую публикацию и сохраняю ее, она сохраняется в базе данных, и я даже могу обновить ее без проблем. У меня просто небольшая проблема с булевым флажком. Это мой первый проект в Laravel, который, я уверен, является частью моего препятствия.
схема
...
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->unsignedBigInteger('user_id');
$table->string('title');
$table->text('body')->nullable();
$table->string('photo')->nullable();
$table->boolean('is_featured')->nullable()->default(false);
$table->boolean('is_place')->nullable()->default(false);
$table->string('tag')->nullable()->default(false);
$table->timestamps();
});
Schema::table('posts', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users');
});
}
...
PostController.php
...
public function store(Request $request)
{
$rules = [
'title' => ['required', 'min:3'],
'body' => ['required', 'min:5']
];
$request->validate($rules);
$user_id = Auth::id();
$post = new Post();
$post->user_id = $user_id;
$post->is_featured = request('is_featured');
$post->title = request('title');
$post->body = request('body');
$post->save();
$posts = Post::all();
return view('backend.auth.post.index', compact('posts'));
}
...
пост /create.blade.php
...
<input type="checkbox" name="is_featured" class="switch-input"
value="{{old('is_featured')}}">
...
2 ответа
Вы не очень понимаете, в чем именно проблема, но вы можете использовать атрибут как логическое значение в модели.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $casts = [
'is_featured' => 'boolean',
'is_place' => 'boolean',
];
}
Затем в вашей форме вы захотите проверить это значение, чтобы определить, установлен ли флажок.
<input type="checkbox" name="is_featured" class="switch-input" value="1" {{ old('is_featured') ? 'checked="checked"' : '' }}/>
В вашем контроллере вы просто захотите проверить, введен ли ввод. Неконтролируемый ввод не будет передан вообще.
$post->is_featured = $request->input('is_featured', false);
Попробуй это$post->is_featured = $request->input('is_featured') ? true : false;