HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers68/otium-gebiedsontwikkeling.nl/database/seeds/ButtonSeeder.php
<?php


use App\Buttons\Models\Button;
use App\Buttons\Models\ButtonTranslation;
use App\Site\Site;
use Illuminate\Database\Seeder;
use Komma\KMS\Globalization\Languages\Models\Language;

class ButtonSeeder extends Seeder
{
    /** @var Site */
    private $site;

    /** @var Language */
    private $languages;

    private array $dataset = [
        [
            'attributes' => ['active' => 1, 'name' => 'Bekijk onze diensten'],
            'translations' => [
                [
                    'language' => 'nl', //ISO-639-1 formatted
                    'attributes' => ['label' => 'Bekijk onze diensten', 'url' => '/nl/diensten'],
                ],
            ],
        ],
        [
            'attributes' => ['active' => 1, 'name' => 'Neem contact op'],
            'translations' => [
                [
                    'language' => 'nl', //ISO-639-1 formatted
                    'attributes' => ['label' => 'Neem contact op', 'url' => '/nl/contact'],
                ],
            ],
        ],
    ];

    public function __construct()
    {
        $this->site = Site::where('slug', '=', 'default')->first();
        $this->languages = Language::whereIn('iso_2', config('seeds.languages'))->get(['id', 'iso_2']);
    }

    /**
     * Run the seed
     */
    public function run()
    {
        foreach ($this->dataset as $buttonData) {
            //Only seed the page if it's code is defined in seeds.pages
            if(in_array($buttonData['attributes']['name'], config('seeds.buttons'), true))
                $this->createButton($buttonData);
        }
    }

    /**
     * @param array $buttonData
     * @return Button
     */
    private function createButton(array $buttonData): Button
    {
        //Create the button itself...
        $button = new Button($buttonData['attributes']);
        $button->save();

        //Create the buttons translations...
        foreach($buttonData['translations'] as $translationData) {
            $language = $this->languages->firstWhere('iso_2', $translationData['language']);
            if ($language) {
                $pageTranslation = new ButtonTranslation($translationData['attributes']);
                $pageTranslation->language()->associate($language);
                $pageTranslation->translatable()->associate($button);
                $pageTranslation->save();
            }
        }

        return $button;
    }

}