Model Route Seeder
class Produit extends Model Route::get('/produits', [ProduitController::class, 'index'])- public function run(): void
{ >name('[Link]'); {
protected $fillable = ['categorie_id', 'autre_attribut1', 'autre_attribut2', ...]; Route::get('/produits/create', [ProduitController::class, 'create'])- User::create([
} >name('[Link]'); 'name'=>'othman',
Donner le code de la méthode "produits à ajouter au Route::post('/produits', [ProduitController::class, 'store'])- 'email'=>'othman02@[Link]',
>name('[Link]'); 'password'=>Hash::make('12345678'),
model Catégorie. Grâce à cette méthode nous pouvons Route::get('/produits/{produit}/edit', [ProduitController::class, 'edit'])- ]);
accéder à la collection des produits associés à une >name('[Link]'); php artisan db:seed --class=Userseeder
catégorie en accédant à la propriété "produits" Route::put('/produits/{produit}', [ProduitController::class, 'update'])-
class Catégorie extends Model >name('[Link]'); Factory
{ Route::delete('/produits/{produit}', [ProduitController::class, 'destroy'])- class UserFactory extends Factory
public function produits() >name('[Link]'); {
{ protected $model = User::class;
return $this->hasMany(Produit::class, 'categorie_id'); Index
} @extends('[Link]') public function definition()
} {
Migration @section('content') return [
public function up() <h1>Liste des produits</h1> 'name' => $this->faker->name,
{ 'email' => $this->faker->unique()->safeEmail,
Schema::create('categories', function (Blueprint $table) { <table> 'password' => Hash::make('password'), // You can customize the
$table->id(); <thead> default password value if needed
$table->string('nom'); <tr> ];
$table->decimal('prix'); <th>ID</th> }
$table->text('description'); <th>Catégorie</th> }
$table->string('image'); <th>Actions</th>
$table->foreignId('user_id')->constrained(); </tr>
$table->timestamps(); // Ajout des colonnes "created_at" et </thead>
"updated_at" <tbody>
}); @foreach ($produits as $produit)
} <tr>
Controller <td>{{ $produit->id }}</td>
class ProduitController extends Controller <td>{{ $produit->categorie->nom }}</td>
{ <td>
public function index() <a href="{{ route('[Link]', $produit) }}">Éditer</a>
{ <form action="{{ route('[Link]', $produit) }}"
$produits = Produit::all(); method="POST" style="display: inline">
return view('index', compact('produits')); @csrf
} @method('DELETE')
<button type="submit">Supprimer</button>
public function create()
</form>
{
</td>
return view('create');
} </tr>
@endforeach
public function store(Request $request) </tbody>
{ </table>
$produit = new Produit([ @endsection
'nom' => $request->nom,
'prix' => $request->prix,
'description' => $request->description,
Validate
'categorie_id' => $request->categorie_id, public function store(Request $request)
]); {
// Valider les données du formulaire
// Sauvegarder le produit dans la base de données $request->validate([
$produit->save(); 'nom' => 'required|max:255',
// Rediriger vers la page d'accueil ou une autre vue 'prix' => 'required|numeric|min:0',
return redirect()->route('[Link]')->with('success', 'Produit ajouté avec 'description' => 'required',
succès'); 'categorie_id' => 'required|exists:categories,id',
} ]);
public function edit(Produit $produit) Middleware
{ php artisan make:middleware AuthMiddleware
return view('edit', compact('produit')); public function handle($request, Closure $next)
} {
if (!Auth::check()) {
public function update(Request $request, Produit $produit) return redirect()->route('login');
{ }
// Valider les données du formulaire
$request->validate([
return $next($request);
'categorie_id' => 'required',
// Ajoutez ici la validation des autres attributs du formulaire }
]); Route::middleware([AuthMiddleware::class])->group(function () {
// Mettre à jour les attributs du produit avec les données du formulaire Add column
$produit->update([ php artisan make:migration add_image_to_produits_table --
'categorie_id' => $request->categorie_id,
table=produits
// Ajoutez ici les autres attributs du formulaire
public function up()
]);
{
// Rediriger vers la page d'accueil ou une autre vue Schema::table('produits', function (Blueprint $table) {
return redirect()->route('[Link]')->with('success', 'Produit mis à jour $table->string('image')->nullable();
avec succès'); });
} }
public function destroy(Produit $produit) public function down()
{ {
// Supprimer le produit de la base de données Schema::table('produits', function (Blueprint $table) {
$produit->delete();
$table->dropColumn('image');
});
// Rediriger vers la page d'accueil ou une autre vue
return redirect()->route('[Link]')->with('success', 'Produit supprimé avec }
succès');
}
}