Bonjour,
Je souhaite actuellement implémenter un compteur de vue sur un systeme d'annonce, mais j'avoue qu'avec laravel je suis un peu perdu, un petit coup de pouce serais vraiment sympa. actuellement j'essaye de faire un update

public function show($slug){

        $advert = Advertissement::where('slug',$slug)->firstOrFail();
        $author = $advert->user;

        $socials = Social::all();

        $catAdvert = AdvertCategory::with(['advertissements' => function($query){
            $query->orderBy('created_at','DESC')->get();
        }]);

         Advertissement::update([
            'view_count' => $advert->view_count + 1
        ]);

        return View::make('advertissements.show',compact('advert','author','catAdvert','socials'));
    }

Mais lors de l'execution un jolie petit message d'erreur

Non-static method Illuminate\Database\Eloquent\Model::update() should not be called statically, assuming $this from incompatible context

Sachant que je veu que mon compteur s'increment par article.

Voici le schema de ma table

Schema::create('advertissements', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('title');
            $table->string('descritpion');
            $table->string('content');
            $table->integer('is_online')->default(1);
            $table->string('firstname');
            $table->string('lastname');
            $table->integer('club_id');
            $table->integer('view_count')->default(0);
            $table->integer('advercategory_id');
            $table->timestamps();
        });

Merci pour votre aide

4 réponses


Azorgh
Réponse acceptée

Hello,

Voici comment tu devrais procéder :

<?php
public function show($slug){
        $advert = Advertissement::where('slug',$slug)->firstOrFail();
        //Regarde pour la fonction increment, elle sera plus propre a utiliser (même si le +1 fonctionne)
        //Ce serait quelque chose comme ça : $advert->increment('view_count');
        $advert->update(['view_count' => $advert->view_count + 1]);

        $author = $advert->user;
        $socials = Social::all();
        $catAdvert = AdvertCategory::with(['advertissements' => function($query){
            $query->orderBy('created_at','DESC')->get();
        }]);

        return View::make('advertissements.show',compact('advert','author','catAdvert','socials'));
    }

Je n'ai pas testé, mais ca devrait être ça !

Merci Pallmallshow pour ton aide je vais test et reviens vers toi pour te dire les résultats.
Aprés il est vrai que je voulais utilisé les Events de laravel 4. mais j'avoue que je rique de me perdre vite.

Pallmallshow je n'ai pas l'impression qu'il update à chaque fois que la personne visualise l'annonce .

En faite si il update bien mais pas par session en faite, merci je vais essayé de faire par session now pour éviter le spaming d'un user

Cool ! :)

Marque la réponse qui t'a aidé afin de passer ton sujet en résolu ;)