Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit DB Query und explode mit Laravel

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Problem mit DB Query und explode mit Laravel

    Ich habe mir eine eigene Klasse in Laravel geschrieben die sich myACL nennt. Es geht um Benutzerberechtigungen die geprüft werden sollen. Jeder Benutzer kann nur einer Gruppe zugeordnet sein. Jede Gruppe enthält in der Tabelle groups Berechtigungen. Die Berechtigungen habe ich in ein Text Feld gepackt und trenne sie mit einem Komma.

    PHP-Code:
    //Alle Berechtigungen für die Gruppe aus der Datenbank holen. Dem Benutzer ist
        //in der Session eine Gruppe zugeteilt
        
    public static function getGroupPermissions()
        {
            
    $group DB::table('groups')->where('groupname'Session::get('group'))->first();
            
    self::$grouppermission explode(","$group->permissions);
            
    array_walk(self::$grouppermission'trim');
        } 
    Das Problem ist das var_dump(self::$grouppermission) immer leer ist. Wenn ich aber var_dump($group) mache, sehe ich das der Query funktioniert.
    liegt es vielleicht an dem $group->permissions im explode? Weiß gerade leider nicht was ich machen soll oder wo der Fehler liegt. eine Exception bekomme ich nicht. Der Array bleibt aber leer.

  • #2
    Von welchem Typ ist denn $group->permissions? Ich vermute einfach mal, nicht string oder string ohne Kommata. Und dann funzt das schonmal nicht.

    Zweite Frage: Wiese benutzt du nicht Eloquent?

    Dritte Frage: Wieso erfindest du das Rad neu? https://github.com/cartalyst/sentry

    Kommentar


    • #3
      Zitat von alxy Beitrag anzeigen
      Zweite Frage: Wiese benutzt du nicht Eloquent?
      Ist vielleicht für ihn (insgesamt, nicht im konkreten Fall) angenehmer als mit Models zu arbeiten. Eloquent umzubiegen ist nach meiner Erfahrung manchmal doch etwas aufwendiger.

      Zitat von alxy Beitrag anzeigen
      Dritte Frage: Wieso erfindest du das Rad neu? https://github.com/cartalyst/sentry
      Sentry hat leider Limitationen, die sehr lästig sein können. Ich kann leider nicht auf Anhieb abrufen was mich damals daran gestört hat aber es gab da mehrere Dinge.

      Naja ob Eloquent und/oder Sentry zu nutzen jetzt aber wirklich für den TE nachteilig wäre kann nur er allein wissen. Um Sentry auszureizen muss man schon hohe Anforderungen haben.

      Ansonten zum Thema eigenes ACL mit Laravel, hier noch eins sehr empfehlenswertes Tutorial, sonfern noch nicht bekannt: http://ollieread.com/blog/2014/03/18...d-laravel-acl/

      Kommentar


      • #4
        Zitat von alxy Beitrag anzeigen
        Von welchem Typ ist denn $group->permissions? Ich vermute einfach mal, nicht string oder string ohne Kommata. Und dann funzt das schonmal nicht.

        Zweite Frage: Wiese benutzt du nicht Eloquent?

        Dritte Frage: Wieso erfindest du das Rad neu? https://github.com/cartalyst/sentry
        Gute Frage. Was das für ein Typ ist weiß ich jetzt nicht. Hatte nach einer Lösung im Internet gesucht die mir nur eine Row zurückliefert. Bin halt mit Laravel noch nicht so vertraut. Könntest du mir zu eine Alternative raten wie ich das machen könnte? Hab auch mal versucht den query mit einer foreach schleife abzuarbeiten, aber war leider auch ohne Erfolg. Im Grunde müsste $group ein Objekt sein und nach der Laravel Syntax sollte ich über $group->permission die Spalte aufrufen können.

        Ich benutze kein Eloquent, weil ich neben den Query noch andere Funktionen eingebaut habe. Im Grunde sind das nur 4-5 Methoden die ich benutze. Hab kein Bock für 3 mini Tabellen 3 Klassen zu erstellen. Oder eine Klasse mit Relationen.

        Ich erfinde das Rad nicht neu. Ich minimiere nur den Aufwand auf die Funktionen die ich benötige. Zum Beispiel fällt die Registrierung komplett weg, die brauch ich nicht. Zum anderen habe ich mir eine eigene Funktion eingebaut die mir ganz gut gefällt.

        Kommentar


        • #5
          Dann prüf das doch eifnach mal. Schreib in deine Methode mal dd($group->permissions); und gucke, was zurückkommt. Ich glaube nämlich, nur wenn du mit Eloquent arbeitest bekommst du ein (Model)-Object zurück. Bei ->first() (Wrapper für ->get()->limit(1) ) bekommst du ein array zurück: https://github.com/laravel/framework...lder.php#L1330

          Probiere dementsprechend mal $group['permissions']. Falls das auch nicht geht, debugge weiter. Mittels dd() einfach mal alle Variablen ausgeben. Und mit Eloquent drei Klassen und zwei Relationen abzubilden wäre vermutlich schneller gegangen, als du schon an dem Problem sitzt

          Kommentar


          • #6
            Zitat von alxy Beitrag anzeigen
            Dann prüf das doch eifnach mal. Schreib in deine Methode mal dd($group->permissions); und gucke, was zurückkommt. Ich glaube nämlich, nur wenn du mit Eloquent arbeitest bekommst du ein (Model)-Object zurück. Bei ->first() (Wrapper für ->get()->limit(1) ) bekommst du ein array zurück: https://github.com/laravel/framework...lder.php#L1330

            Probiere dementsprechend mal $group['permissions']. Falls das auch nicht geht, debugge weiter. Mittels dd() einfach mal alle Variablen ausgeben. Und mit Eloquent drei Klassen und zwei Relationen abzubilden wäre vermutlich schneller gegangen, als du schon an dem Problem sitzt
            Die Klasse war schnell geschrieben, das debuggen hat halt Zeit gekostet. Liegt aber auch eher daran, das ich mit Laravel noch nicht so vertraut bin. Hab heute erst angefangen mit Querys zu arbeiten und musste mich erstmal an die Syntax gewöhnen. Bin aber schon sehr weit gekommen finde ich.

            Gut die dd() Funktion war mir noch nicht bekannt. Ich glaube das $group['permissions'] eine Exception geschmissen hat. Probiere ich vielleicht später oder morgen nochmal aus.

            Danke schonmal für die Tipps.

            Kommentar


            • #7
              dd() solltest du dir merken, dass ist super nützlich um mal schnell was debuggen zu können, wenn man kein dediziertes Debugging-Tool hat.

              Kommentar


              • #8
                Hab jetzt das hier in Laravel gefunden.

                in app/config/database.php

                PHP-Code:
                /*
                    |--------------------------------------------------------------------------
                    | PDO Fetch Style
                    |--------------------------------------------------------------------------
                    |
                    | By default, database results will be returned as instances of the PHP
                    | stdClass object; however, you may desire to retrieve records in an
                    | array format for simplicity. Here you can tweak the fetch style.
                    |
                    */

                    
                'fetch' => PDO::FETCH_CLASS

                Kommentar

                Lädt...
                X