web-dev-qa-db-fra.com

LARAVEL 5.5 - Insertion de données dans la base de données à partir de FORM avec modèle éloquent

J'ai un problème avec l'insertion de données dans la base de données.

Tout ce que j'ai fait jusqu'à présent, c'est:

Créer un modèle avec contrôleur et migration via:

php artisan make:model Cars -mcr


Donc, maintenant, tous mes fichiers ont cette apparence:

Voitures - Modèle

namespace App;

use Illuminate\Database\Eloquent\Model;

class Cars extends Model
{

}

AddCar.blade.php - Voir

<form action="{{ action('CarsController@store') }}" method="post">
    {{ csrf_field() }}
    <input type="text" name="brand" placeholder="Marka">
    <input type="text" name="model" placeholder="Model">
    <input type="text" name="doors" placeholder="Ilość drzwi">
    <input type="text" name="priceHour" placeholder="Cena za godzinę">
    <input type="text" name="priceDay" placeholder="Cena za dzień">
    <input type="text" name="priceWeek" placeholder="Cena za tydzień">
    <input type="text" name="priceMonth" placeholder="Cena za miesiąc">
    <input type="text" name="priceYear" placeholder="Cena za rok">
    <input type="submit" value="Osadź">

</form>

CarsController - Contrôleur

namespace App\Http\Controllers;

use App\Cars;
use Illuminate\Http\Request;

class CarsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return "test";
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $cars = new Cars;
        $cars->brand = $request->input('brand');
        $cars->brand = $request->input('model');
        $cars->brand = $request->input('type');
        $cars->brand = $request->input('doors');
        $cars->priceHour = $request->input('priceHour');
        $cars->priceDay = $request->input('priceDay');
        $cars->priceWeek = $request->input('priceWeek');
        $cars->priceMonth = $request->input('priceMonth');
        $cars->priceYear = $request->input('priceYear');
        $cars->save();
        return redirect('admin.AddCar');
    }

web.php - Routage

Route::resource('/cars', 'CarsController');

Migration

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCarsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cars', function (Blueprint $table) {
            $table->increments('id');
            $table->string('brand');
            $table->string('model');
            $table->string('type');
            $table->integer('doors');
            $table->string ('priceHour')->nullable();
            $table->string('priceDay')->nullable();
            $table->string('priceWeek')->nullable();
            $table->string('priceMonth')->nullable();
            $table->string('priceYear')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('cars');
    }
}


Erreur que je reçois après avoir rempli tous les champs et cliqué sur "Osadz" = submit is:

SQLSTATE [HY000]: Erreur générale: 1364 Le "modèle" de champ n'a pas de valeur par défaut (SQL: insérer dans cars (brand, priceHour, priceDay, priceWeek, priceMonth, priceYear, updated_at, created_at) valeurs (3, 3, 53, 3, 35, 3, 2018-01-30 09:36:57, 2018-01-30 09:36:57))



Et ma question est, quelle valeur par défaut manque dans mon code? 

3
Kamil Lonowski

"modèle"

Vous devez ajouter le champ 'modèle' dans le modèle de votre voiture, des champs remplissables.

Ou si vous ne souhaitez pas lui attribuer une valeur initiale, vous pouvez ajouter -> nullable () dans le fichier en cours de migration.

2
CritingZ

Merci les gars, vous êtes génial! 

Déjà résolu le problème, j'ai raté le champ dans la vue:

<input type="text" name "type" placeholder="Typ"/>

qui ne peut pas être NULL

et je "répare" le modèle avec:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Cars extends Model
{
    protected $fillable = [

        "brand", "model" , "type" , "doors" , "priceHour" ,
        "priceDay" , "priceWeek" , "priceMonth" , "priceYear"
        ];
}

Merci et bonne journée ! 

1
Kamil Lonowski

Vous devez définir la colonne de modèle de votre table comme étant nullable ou lui attribuer une valeur par défaut dans le fichier de migration. L'erreur indique que cette entrée est manquante:

<input type="text" name="model" placeholder="Model">

// examples for your migration
$table->string('model')->nullable();
// or
$table->string('model')->default('foo');

Sinon, si aucune de ces solutions ne fonctionne, ajoutez une validation pour vous assurer que les données correctes sont envoyées à votre contrôleur. 

Dans votre contrôleur, vous pouvez définir les règles comme suit:

$validatedData = $request->validate([
    'model' => 'required|string|max:255',
    'Brand' => 'required|string',
    ......
]);
0
user320487