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;
}
}