Bonjour,

Voila je rencontre un petit problème avec mon code.
En effet auparavant lorsque j'uploadé l'image, je stocké dans la table par exemple post le chemin de l'image en question.

Dorénavant mon projet ayant évoluer, je souhaiterai stocker les liens des images dans une table "image", jusque la pas de soucis, j'ai donc créer une table image avec en champ un id et un champ lien.

Donc voila le code que j'utilisé:

<?php

namespace App\Http\Controllers\Admin\Services;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Models\Services\Link;
use App\Models\Storage\Imageup;
use Session;

class LinksController extends Controller
{

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        // Validate the data
        $link = Link::find($id);

        $this->validate($request, array(
                'title' => 'required|max:255',
                'link'  => 'nullable',
                'description'  => 'required'
        ));

        $link = Link::find($id);

        $link->title = $request->input('title');
        $link->link = $request->input('link');
        $link->description = $request->input('description');

        if ($request->hasFile('featured_img')) {
            // Ajoute la nouvelle photo
            $image = $request->file('featured_img');
            $filename = time() . '.' . $image->getClientOriginalExtension();
            $location = public_path('images/upload/' . $filename);
            Image::save($location);
            $oldFilename = $post->image;
            // Met à jour la BDD
            $link->image = $filename;
            // Efface l'ancienne photo
            Storage::delete($oldFilename);

        }

        $link->save();

        Session::flash('success', "Le lien à été correctement mis à jour.");

        return redirect()->route('links.index');
    }

Je n'arrive pas à voir comment stocker la partie filename de mon image après upload dans une autre table que link donc moi je voudrais stocker l'id et le lien de mon entité link dans la table image mais je bute.

Cela ne doit sans doute être pas grand chose, je reste donc à votre écoute et vos conseils.

Merci bien.

3 réponses


https://laravel.com/docs/7.x/queries#inserts

DB::table('image')->insert([
    ['email' => 'value', 'id' => 'value']
]);

Hello,

Tu peux te servir des relations dans ton cas.
Un Link -> belongsTo -> Image

Tu peux donc créer un model Image, qui hasOne de Link.

class Link extends Model{
    public function image(){
        return $this->belongsTo(Image::class);
    }
}

class Image extends Model{
    public function link(){
        return $this->hasOne(Link::class);
    }
}

//Controller
public function update(Request $request, $id){
    //Toute ta logique
    $image = new Image();
    $image->lien = $leLienDeLImage;
    $image->save();

    $link->image()->associate($image);
}

Dans tes vues / controllers, pour retrouver l'image du lien, tu pourras faire :

<img src="{{ $link->image->lien }}"></src>

Je te laisse le lien de la doc pour en savoir plus :)
https://laravel.com/docs/7.x/eloquent-relationships

J'ai eu un petit problème sur de nombreuses applications qui fournissent et stockent des images sur les téléphones mobiles.
Après un certain temps de recherche, j'ai sélectionné un site Web bhcmod.com qui se spécialise dans la fourniture de jeux de déverrouillage, des applications mobiles gratuites et populaires pour le système d'exploitation Android.