uso - php string to boolean
Cómo guardar valores booleanos en laravel elocuente (4)
Cuando una casilla de verificación está marcada, su valor está presente en los datos publicados. Cuando no está marcado, su valor no está presente. Esto significa que cuando haces $request->all()
contendrá solo las casillas de verificación que fueron marcadas. Entonces, en su caso, si deja las 3 casillas de verificación sin marcar, su $request->all()
podría generar una matriz vacía (suponiendo que no se publiquen otros campos).
Cuando ejecuta Article::create($request->all());
sin marcar casillas de verificación, esencialmente pasará un conjunto de datos vacío, lo que significa que su base de datos se completará con los valores predeterminados para los campos que no proporcionó.
Como no proporcionó un valor predeterminado en su migración, MySQL adivinará cuál debe ser el predeterminado en función del tipo de campo, que en el caso de un valor booleano será 0
. Sin embargo, es posible que vea algunas advertencias / errores.
Hay muchas formas en que puede hacer que esto funcione para que se guarde un 1
cuando se marca una casilla de verificación o 0
cuando no está marcada. La forma más fácil en su escenario sería establecer el valor de cada casilla de verificación en 1
y configurar explícitamente los valores predeterminados en su migración, es decir,
Migración:
$table->boolean(''favicon'')->default(0);
Formar:
{!! Form::checkbox(''title'', ''1''); !!}
De esta manera, cuando la casilla de verificación del título está marcada, su $request->all()
devuelve una matriz que contiene un elemento ''title'' => ''1''
y esto se guarda en su base de datos. Todas las casillas sin marcar están predeterminadas en 0 según su migración.
Sin embargo, prefiero ser más explícito cuando escribo mi método para manejar la tienda.
$article = new Article();
$article->title = $request->has(''title''); // Will set $article->title to true/false based on whether title exists in your input
// ...
$article->save();
He realizado la siguiente migración en Laravel:
<?php
use Illuminate/Database/Schema/Blueprint;
use Illuminate/Database/Migrations/Migration;
class QualityCheckTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(''quality_check'', function (Blueprint $table) {
$table->increments(''id'');
$table->boolean(''favicon'');
$table->boolean(''title'');
$table->boolean(''image-optimization'');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop(''quality_check'');
}
}
Tengo el siguiente método de controlador que se ejecuta cuando se envía el formulario en frontEnd:
public function store(CreateArticleRequest $request) {
// $input = Request::all();
Article::create($request->all());
return redirect(''articles'');
}
Mi forma se ve así, entonces:
{!! Form::open([ ''action'' => ''QualityCheckController@validateSave'' , ''class''=>''quality-check-form'' , ''method'' => ''POST'' ]) !!}
<div class="input-wrpr">
{!! Form::label(''favicon'', ''Favicon'') !!}
{!! Form::checkbox(''favicon'', ''value'' ); !!}
</div>
<div class="input-wrpr">
{!! Form::label(''title'', ''Page Title'') !!}
{!! Form::checkbox(''title'', ''value''); !!}
</div>
<div class="input-wrpr">
{!! Form::label(''image-optimization'', ''Image Optimization'') !!}
{!! Form::checkbox(''image-optimization'', ''value''); !!}
</div>
{!! Form::submit(''Click Me!'') !!}
{!! Form::close() !!}
Entonces, cuando el método se ejecuta, los valores de las casillas de verificación se guardan en la base de datos.
A partir de ahora, todas las entradas se muestran como 0
, al igual que:
Ahora, ¿cómo hacer que cuando la casilla de verificación esté marcada, 1
se guarde y cuando la casilla de verificación se deje desmarcada, el valor ingresado se deje en 0
?
Puede marcar si la casilla de verificación está configurada con isset($request->favicon)
o empty($request->favicon)
o ->has(''favicon'')
:
public function store(CreateArticleRequest $request) {
foreach ([''favicon'', ''title'', ''image-optimization''] as $box) {
$request($box) = $request->has($box);
}
Article::create($request->all());
return redirect(''articles'');
}
Puedes usar mutadores en Laravel. Utilice este enlace y obtendrá la idea:
¿Se acordó de pasarlos en la matriz $fillable
en el Modelo de artículo?
protected $fillable = [
''favicon'',
''title'',
''image-optimization''
];
y como nota al lado de las casillas de verificación. Puede hacer una entrada oculta con el mismo nombre y hacerla falsa. De esta forma, si la casilla de verificación está desmarcada, será falsa, pero si está marcada, volverá a ser verdadera, ya que es el último valor:
<div class="input-wrpr">
{!! Form::label(''title'', ''Page Title'') !!}
{!! Form::hidden(''title'', false); !!}
{!! Form::checkbox(''title'', ''value''); !!}
</div>