Laravel HasImages Trait

  • Hey, ich Sitze gerade daran meine Models so auf bzw umzuschreiben das ich mehr mit Traits arbeiten kann zB HasCategories oder HasTags. In diesem Zuge macht es für mich Sinn das ganze auch mit HasImages so zu machen. Images haben zB die Produkte oder die Artikel. Von Prinzip her klappt der Upload schon allerdings wird es nicht in die Datenbank eingetragen. Die Frage die ich mir stelle:

    Macht es Sinn alle hochgeladenen Bilder auch in der DB festzuhalten und welche Daten sollten das genau sein?

    Ich hoffe jemand (lach) kann mir eventuell sein HasImages Trait mal zeigen oder mir ein paar Tipps geben wo es genau hakt.

    Liebe Grüsse und einen schönen Montag

  • Macht es Sinn alle hochgeladenen Bilder auch in der DB festzuhalten

    Metadaten ja, damit man auch weiß welche Datei es ist.

    und welche Daten sollten das genau sein?

    Dateiname, Original Dateiname (falls man das möchte), Dateiendung, Größe, Model, Model ID.

    Ich hoffe jemand (lach) kann mir eventuell sein HasImages Trait mal zeigen

    Ist ja kein Geheimnis wie das aussieht:

    Tipps geben wo es genau hakt.

    Dafür müsste man das Problem erstmal kennen.

    Von Prinzip her klappt der Upload schon allerdings wird es nicht in die Datenbank eingetragen.

    Am Upload ändert sich ja nichts, aber wie versuchst du es denn einzutragen?

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

    2 Mal editiert, zuletzt von Syntafin (17. März 2025 um 19:03)

  • Dateiname, Original Dateiname (falls man das möchte), Dateiendung, Größe, Model, Model ID.

    Okay kann deinen Trait soweit nachvollziehen. Was ich nicht finde ist wo du die besagten Meta Daten Speicherstadt bzw. wie? Ich schätze das Model heißt File? :)

    Und als relation files() quasi

    Code
    $this->hasOne(File::class);
  • as ich nicht finde ist wo du die besagten Meta Daten Speicherstadt bzw. wie?

    Korrekt, hab das Model einfach File genannt.

    Und als relation files() quasi

    PHP
    public function files(): HasMany
    {
        return $this->hasMany(File::class);
    }

    Bei mir ist es eine HasMandy Relation, da mehrere Dateien einem Model zugewiesen werden können.

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

  • Was ich meinte in dem Trait finde ich nur das der filename und Endung gespeichert werden. Wo deklarierst du den Rest oder bin ich einfach grad nur blind?

    Macht es Sinn in den Trait upload Funktion zu bauen die ich quasi nutze um images hoch zuladen?

    Einmal editiert, zuletzt von pixelpatron (17. März 2025 um 19:19)

  • Der Trait baut bei mir nur die URLs, erfüllt also aktuell sonst keine Funktion.

    Wenn der Upload bei dir an mehreren Stellen erfolgt, macht es schon Sinn das ganze in einen Trait oder Service auszulagern.

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

  • Okay ich verstehe. Eine wichtige Frage habe ich aber noch: Hast du generell deine Models so aufgebaut das du Downloads anbieten könntest? Sprich: Der Image Upload .. -> file Model hast du da für Images eine Tabelle und zb eine für Files wie pdfs?

    Nachtrag:

    HasImages
    Article Model
    Code
    public function files(): HasMany
        {
            return $this->hasMany(File::class);
        }

    Bin total lost: Als Fehler bekomme ich beim Uploaden:

    SQLSTATE[HY000]: General error: 1 table files has no column named article_id (Connection: sqlite, SQL: insert into "files" ("path", "article_id", "updated_at", "created_at") values (article/1/images//01JPJVHQYRYPKFP8S40VYJ5D1N.jpg, 1, 2025-03-17 21:08:31, 2025-03-17 21:08:31))

    Wobei ich nicht will das da article_id steht oder geht das nicht anderster?

    2 Mal editiert, zuletzt von pixelpatron (17. März 2025 um 21:09)

  • Downloads laufen bei mir über temporäre URLs, da die ja entweder außerhalb des öffentlichen Bereiches liegen die original Dateien, oder eben auf Object Storages wie Amazon S3, Cloudflaute R2 etc.

    Das JSON da oben ist vom File Model, mehr Daten speichere ich darin nicht ab, die Dateien sind aber ausschließlich für das Image Model, weshalb ich keine Angabe zum model speichere.

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

Jetzt mitmachen!

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