1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Angeblich leere Property, dabei ist sie vorhanden

    • PHP
    • Problem
  • Syntafin
  • 4. Januar 2025 um 11:38
  • Unerledigt
  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.783
    Trophäen
    2
    Beiträge
    1.414
    • 4. Januar 2025 um 11:38
    • #1

    Hallöchen,

    das Problem begleitet mich jetzt schon länger, eine Lösung finde ich jedoch nicht dafür.
    Es kommt immer wieder vor das einige (vor allem durch Migration übertragene) Einträge in meiner App einen Fehler auslösen: Attempt to read property "filename" on null

    Wo das ganze passiert, ist auch recht einfach herausgefunden:

    PHP
    <?php
    
    namespace App\Traits;
    
    trait HasImage
    {
    	public function getImageUrlAttribute(): string
        {
            return $this->files
                ? Storage::disk('public')->url('files/show/'.$this->files()->first()->filename.'.webp')
                : $this->defaultImage();
        }
    }
    Alles anzeigen

    Würde hier ja tatsächlich aber schon das zuvorgehende Property files leer sein, müsste er mir das Standard-Bild ausgeben.
    Daran hab ich natürlich auch gedacht, und einfach mal einen der betroffenen Einträge via Tinker mir angeschaut:

    Code
    App\Models\Image#2439 ▼
      id: 325
      shortkey: "dDJE1"
      description: "{"de": "Ob der Grebuloff genau wie ich über die Zukunft nachdenkt? Das neue Leben das auf Elysium entsteht überrascht mich immer wieder aufs neue."}"
      status: 1
      watermark: 1
      promoted: 0
      user_id: 1
      folder_id: 1
      created_at: "2022-10-25 22:40:58"
      updated_at: "2024-08-04 12:52:34"
      deleted_at: null
      user: App\Models\User {#3419 ▶}
      files: Illuminate\Database\Eloquent\Collection {#3416 ▶
        all: array:5 [▼
          0 => App\Models\File {#3423 ▼
            id: 367
            filename: "nLyYSZxJKP9IxjBvBEHgQOlQyFlae8Y4KQBO3fM0kHnxRsiHguKQVVpfudQqLDYu"
            extension: "webp"
            mime: "image/webp"
            filesize: 342248
            width: 2560
            height: 1440
            user_id: 1
            image_id: 325
            created_at: "2022-10-25 22:41:00"
            updated_at: "2024-08-04 12:52:36"
            deleted_at: null
          }
          1 => App\Models\File {#3422 ▶}
          2 => App\Models\File {#2431 ▶}
          3 => App\Models\File {#3426 ▶}
          4 => App\Models\File {#3427 ▶}
        ]
      }
      folder: App\Models\Folder {#3448 ▶}
      +image_url: "https://syntafin.de/storage/files/show/nLyYSZxJKP9IxjBvBEHgQOlQyFlae8Y4KQBO3fM0kHnxRsiHguKQVVpfudQqLDYu.webp"
      +folder_url: "https://syntafin.de/storage/files/folder/nLyYSZxJKP9IxjBvBEHgQOlQyFlae8Y4KQBO3fM0kHnxRsiHguKQVVpfudQqLDYu.webp"
      +image_contact: "https://syntafin.de/storage/files/contact/nLyYSZxJKP9IxjBvBEHgQOlQyFlae8Y4KQBO3fM0kHnxRsiHguKQVVpfudQqLDYu.webp"
    Alles anzeigen

    Auffällig für mich ist, das es hier nun scheinbar keine Probleme gibt mir letztendlich image_url zu erzeugen. Die gesuchte Datei ist ja auch vorhanden :thinking_face:.
    Und lasse ich in besagter Funktion mir zuvor files in den Log schreiben... ja dann steht das sogar im Log das es da ist.


    Jemand eine Idee diesbezüglich?

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 4. Januar 2025 um 13:23
    • #2

    Kann es sein, dass nicht $this->files leer ist, sondern filename? Dazu gibt es dort jetzt keine Abfrage/Behandlung.

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.783
    Trophäen
    2
    Beiträge
    1.414
    • 4. Januar 2025 um 13:30
    • #3

    Da es faktisch unmöglich ist das filename nichts hat (NOT NULL), und wie man sieht Zeile 18 ist der Dateiname vorhanden.

    Eine Änderung des Ternary Operators auf !is_null ($this->files->first()->filename ändert da bisher nichts.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • PixelPatron
    20
    PixelPatron
    github.com/pixelpatron90
    Reaktionen
    164
    Punkte
    4.084
    Beiträge
    724
    Einträge
    3
    • 4. Januar 2025 um 13:52
    • #4

    Ich hätte eine Frage zu dem Model Image wenn es gestattet ist:

    Du speicherst also jegliche Images die ein User uploadet in einer Tabelle und weißt sie dem Nutzer zu und zusätzlich noch eine Image id. Wozu ist die zusätzliche image_id

    pixelpatron-100000?style=for-the-badge&logo=X&logoColor=white&labelColor=000000&color=FF0000 pixel_patron-100000?style=for-the-badge&logo=Discord&logoColor=white&labelColor=000000&color=FF0000

    EVARIOO - DISCORD

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 4. Januar 2025 um 14:00
    • #5

    Vielleicht mal so ausprobieren.

    Code
    public function getImageUrlAttribute(): string
        {
            $file = $this->files()->first();
    
            return $file ? Storage::disk('public')->url('files/show/' . $file->filename . '.webp') : $this->defaultImage();
        }
  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.783
    Trophäen
    2
    Beiträge
    1.414
    • 4. Januar 2025 um 14:00
    • #6
    Zitat von evarioo

    Wozu ist die zusätzliche image_id

    Die image_id ist aus dem File-Model, damit man weiß zu welchem "Bild" es gehört (grundlegend kann ein Bild mehrere Dateien haben)

    Zitat von Cheety

    Vielleicht mal so ausprobieren.

    Code
    public function getImageUrlAttribute(): string
        {
            $file = $this->files()->first();
    
            return $file ? Storage::disk('public')->url('files/show/' . $file->filename . '.webp') : $this->defaultImage();
        }

    Das ändert nichts am Problem.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

    Einmal editiert, zuletzt von Syntafin (4. Januar 2025 um 14:10)

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 4. Januar 2025 um 14:26
    • #7

    Dann liegt das Problem weiter oben, oder die Daten, die ankommen, sind nicht richtig. Da hilft nur, alle Daten einmal zu prüfen, die da durchlaufen.

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 4. Januar 2025 um 14:27
    • #8

    Das Problem liegt, denke ich, daran, dass $this->files()->first() null ist und er daraus keinen Filename lesen kann.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • php
  • laravel
  • inertia
  • vue.js

Rechtliches

Impressum

Datenschutzerklärung