Как я могу использовать массив publi c из моей Модели в Сеидере для вставки значений в мою таблицу? - PullRequest
0 голосов
/ 19 января 2020

У меня есть модель с именем Browser, в которой есть массив всех браузеров.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Browser extends Model
{
    const CHROME = 'chrome';
    const FIREFOX = 'firefox';
    const OPERA = 'opera';
    const SAFARI = 'safari';
    const MICROSOFTEDGE = 'microsoft edge';
    const INTERNETEXPLORER = 'internet explorer';
    public static $types = [self::CHROME, self::FIREFOX, self::OPERA, self::SAFARI, self::MICROSOFTEDGE, self::INTERNETEXPLORER];
}

И у меня есть Seeder, который заполняет таблицу браузеров.

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class BrowserSeeder extends Seeder
{
    public function run()
    {
        DB::table('browsers')->insert(array(
            array('name' => 'chrome'),
            array('name' => 'firefox'),
            array('name' => 'opera'),
            array('name' => 'safari'),
            array('name' => 'microsoft edge'),
            array('name' => 'internet explorer'),
            array('name' => 'other'),
        ));
    }
}

Могу ли я использовать массив $ types из моей модели браузера для вставки в базу данных? Потому что для вставки вам нужен ассоциативный массив, и я хотел бы оставить $ types как есть. Могу ли я легко преобразовать его в ассоциативный массив в моем сеялке, не нуждаясь в массиве с ключами, а только с одним ключом?

1 Ответ

0 голосов
/ 19 января 2020

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class BrowserSeeder extends Seeder
{
    public function run()
    {
        $arr = array_map( function( $el ) {
            return array('name' => $el );
        }, App\Browser::$types );

        DB::table('browsers')->insert($arr);
    }
}

Конечно, не обязательно хранить в $arr, но это делает его немного более читабельным, я думаю.

...