Skip to main content

Seed amb timestamp

En aquest cas la migració ens ha creat tres columnes sense informació i el seeding que teníem creat anteriorment no ens serveix perquè no utilitza el model per inserir les dades sinó que fa servir directament l'objecte db de CI4.

Perquè un seed tingui en consideració els timestamp cal que faci servir els models, de forma que crearem un nou seeder que inserirà notícies de farciment dins de la base de dades, però ho farà amb els timestamps, tal com està definida ara la base de dades.

Per tant, haurem de modificar el NewsDataSeeder o crear-ne un de nou. En el nostre cas, crearem un nou seeder:

php spark make:seeder NewsDataTimestamp --suffix
aap\Database\Seeds\NewsDataTimestampSeeder.php
<?php

namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;
use Faker\Factory;

class NewsDataTimestampSeeder extends Seeder
{
    public function run()
    {
        $model = new \App\Models\NewsModel();

        $fake = Factory::create("es_ES");

        for ($i = 0; $i < 10; $i++) {
            $title = $fake->sentence(6);
            $data = [
                'title' => $title,
                'slug' =>  url_title($title),
                'body' =>  $fake->text(),
            ];
            $model->insert($data);
        }
    }
}

Podem apreciar que es fa referència al model que únicament hem creat sense cap mena de funció, partim de les funcions base que ens proporciona CodeIgniter. Per fer referència a aquest model podem fer-ho de dos maneres diferents:

// Crear object directament amb tot el namespace
$model = new \App\Models\NewsModel();

// o
// incloure la classe del model i crear l'objecte
use App\Models\NewsModel;               
$model = new NewsModel();

En aquest cas hem emprat únicament les funcions integrades de codeigniter, però si volem aprofitar la capa d'abstracció que ens permet el Framework potser ens interessaria crear una funció per afegir noves notícies.

Per exemple, afegirem el mètode AddNoticia dins NewsModel.

app\Models\NewsModel.php
/**
 * addNoticia
 * $title    string  128
 * $slug     string  128
 * $body     text      
 * $data_pub datetime
 */
public function addNoticia($title, $slug, $body)
{
    $data = [
        'title' => $title,
        'slug' =>  $slug,
        'body' =>  $body,
    ];
    $this->insert($data);
}

Llavors el nou codi del seeder quedaria com segueix a continuació:

public function run()
{
    $model = new \App\Models\NewsModel();

    $fake = Factory::create("es_ES");

    for ($i = 0; $i < 10; $i++) {
        $title = $fake->sentence(6);

        $model->addNoticia($title,url_title($title),$fake->text());
    }
}