Projets Laravel France

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

Avatar de BarnabéTebda
BarnabéTebda

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 !!

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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);
Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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....

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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....

Posté il y a 1 an

Vous ne pouvez pas répondre à ce sujet.