1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • 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
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 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 :/.
    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?

  • Cheety
    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.

  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 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.

  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 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

  • Cheety
    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();
        }
  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 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.

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

  • Cheety
    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
    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.

Tags

  • php
  • laravel
  • inertia
  • vue.js
  1. Datenschutzerklärung
  2. Impressum