Projets Laravel France

Associer l'enregistrement d'un fichier à d'autres champs d'une table.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    46

    Bonjour la communauté.
    Je souhaite enregistrer en plus d' un fichier dans ma base de données, d'autres champs que contient ma table. Cependant, l'enregistrement du fichier marhe sans erreur à condition que je mette les champs à NULL, ce qui veut dire que dès que mes champs doivent recevoir des valeurs, l'enregistrement ne s'effectue plus avec cette erreur.
    Pour cet exemple, le champs en addition est appelaproposition_id.

    "SQLSTATE[HY000]: General error: 1364 Field 'appelaproposition_id' doesn't have a default value (SQL: insert into documentannexes (name, size, updated_at, created_at) values (word-exa2.pdf, 48127, 2018-12-14 04:23:31, 2018-12-14 04:23:31)) ◀"

    La migration correspondante
    Schema::create('documentannexes', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('size');
    $table->timestamps();
    $table->integer('appelaproposition_id')->unsigned();
    });

    Ceci est ma fonction store

    public function store(Request $request)
    {
    if ($request->hasFile('file')){
    $filename = $request->file->getClientOriginalName();
    $filesize = $request->file->getClientSize();
    $request->file->storeAs('public/upload/Annexes', $filename);
    $file = new Documentannexe;
    $file->name = $filename;
    $file->size = $filesize;
    $file->save();

    //return 'yes';
    }

    $this->validate($request, [
    'name' => 'required|min:2',
    'size' => 'required|min:5',
    'appelaproposition_id' => 'required',

    ]);

    Documentannexe::create([
    'name' => $request->name,
    'size' => $request->size,
    'appelaproposition_id' => $request->appelaproposition_id,

    ]);

    return redirect()->route('home');
    }

    Merci d'avance !!

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2487

    Bonjour,

    Si tu veux pouvoir créer un enregistrement sans passer la vaeur pour le champ appelaproposition_id il faut prévoir une valeur par défaut dans la migration :

    $table->integer('appelaproposition_id')->unsigned()->default(NULL);
  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    46

    Oui, en ce moment, la valeur appelaproposition_id sera null. Or c'est un champ quidoit être rensigné obligatoirement, et c'est là le probleme, puisque en ne mettant pas null par defaut, l'enregistrement echou, avec comme erreur :

    "SQLSTATE[HY000]: General error: 1364 Field 'appelaproposition_id' doesn't have a default value (SQL: insert into documentannexes (name, size, updated_at, created_at) values (word-exa2.pdf, 48127, 2018-12-14 04:23:31, 2018-12-14 04:23:31)) ◀"
    L'idée c'est de pouvoir enregistrer les deux en meme temps, lors du clic du boton enregistrer la.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2487

    Je pense que le champ appelaproposition_id ne doit pas être mentionné dans la propriété $fillable du modèle.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    46

    Salut.. J'ai fais cela et je reçois toujours le meme probleme. J'ai cherché la solution mais rien pour le moment. Je me demande si cela est possible. La seule solution qui marche pour le moment, c'est enregistré le fichier avec le nom du fichier, sa taille, mais pas la clé etrangère associée a cette meme table. Suis toujours a la recherche de la solution....

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    46

    Salut.. J'ai fais cela et je reçois toujours le meme probleme. J'ai cherché la solution mais rien pour le moment. Je me demande si cela est possible. La seule solution qui marche pour le moment, c'est enregistré le fichier avec le nom du fichier, sa taille, mais pas la clé etrangère associée a cette meme table. Suis toujours a la recherche de la solution....

Vous ne pouvez pas répondre à ce sujet.