0
votes

Quelle est la solution pour ajouter une limace unique pour empêcher la création d'une entrée en double dans la création?

Je travaille sur un projet pour mes devoirs que j'essaie de faire fonctionner comme spa, mais j'ai un problème pour faire de la limace pour les postes.

dans le tutoriel que j'ai suivi , Instructeur a utilisé cela pour faire une limace du titre: xxx

maintenant, si je fais cette table unique, ce que c'est ce que je veux faire. Comment dois-je empêcher l'application de me donner une entrée en double? Ou comment puis-je ajouter quelque chose à Slug, comme un nombre, chaque fois que je reçois une entrée en double?

Si je fais un message avec ce message Nom deux fois, la deuxième fois, je reçois Erreur en double.


3 commentaires

Vous pouvez ajouter du temps dans la limace, il ne sera jamais même, comme: $ cours-> Slug = str_slug ($ cours -> Nom. Time ());


Si Slug existe, appendez / incrémentez un compteur à la fin de la limace. par exemple. my_slug_1


@Levi pouvez-vous me donner un exemple de base sur ce que j'ai dit? Comment vérifier la limace existent dans cette fonction?


3 Réponses :


1
votes

Vous pouvez utiliser la classe Inbuilt STR code> et créer des chaînes aléatoires dans votre POST CODE> SLUG. Exemple:

static::creating(function ($course){
        $course->slug = str_slug($course->name . Str::random( 2 ));
    });


0 commentaires

0
votes

Vous pouvez utiliser l'aide de Laravel Inbuilt, suivez le lien ci-dessous.

use Illuminate\Support\Str;


0 commentaires

1
votes

À mon avis, votre réponse sélectionnée ne se rapproche de quelque chose d'efficace. Dans de grandes applications, les 2 chaînes aléatoires peuvent être écrasées en peu de temps et vous aurez des problèmes énormes (code et dB).

Une approche plus sûre consiste à créer un service et à utiliser que lorsque vous enregistrez la limace dans la DB. Ou bien sûr, ce n'est pas 100% parfait mais il est certainement mieux que d'augmenter 2 chaînes aléatoires. Cela peut également affecter la partie SEO de l'application. Ci-dessous, vous pouvez trouver mon exemple: p>

le modèle strud> p> xxx pré>

le service fort> p >

<?php

namespace App\Services;

use App\Job;

class Slug
{
    /**
     * @param $title
     * @param int $id
     * @return string
     * @throws \Exception
     */
    public function createSlug($title, $id = 0)
    {
        // Normalize the title
        $slug = str_slug($title);
        // Get any that could possibly be related.
        // This cuts the queries down by doing it once.
        $allSlugs = $this->getRelatedSlugs($slug, $id);
        // If we haven't used it before then we are all good.
        if (!$allSlugs->contains('slug', $slug)) {
            return $slug;
        }
        // Just append numbers like a savage until we find not used.
        for ($i = 1; $i <= 100; $i++) {
            $newSlug = $slug . '-' . $i;
            if (!$allSlugs->contains('slug', $newSlug)) {
                return $newSlug;
            }
        }
        throw new \Exception('Can not create a unique slug');
    }

    protected function getRelatedSlugs($slug, $id = 0)
    {
        return Model::select('slug')->where('slug', 'like', $slug . '%')
            ->where('id', '<>', $id)
            ->get();
    }
}


1 commentaires

Eh bien, j'ai pensé à ce que tu dises avant de choisir une autre réponse, mais qui pourrait maintenant être la réponse à réparer ma solution pour le moment, mais j'ai toujours pensé à ce que tu as dit, et je cherchais un exemple pour me débarrasser de Str Str aussi, mais merci, je suppose que c'est mieux pour moi, pour le moment.