Laravel не сеет расширенные модели - PullRequest
0 голосов
/ 07 октября 2018

Я создаю альтернативный Id-файл с именем alterId в базе данных и использую его в некоторых случаях вместо поля id.

Например, при редактировании данных клиент отправляет значение alterId вместо идентификатора ...

Поскольку это часть кода, который часто повторяется, я расширил класс Illuminate \ Database \ Eloquent \ Model этимкласс:

namespace App\NewModel;

use Illuminate\Database\Eloquent\Model;

class NewModel extends Model
{           
    public function __construct()
    {
        parent::__construct();

        $this->attributes['alterId'] = $this->generateAlterId();
    }

    public static function convertIdToAlterId($alterId)
    {   
        // some logic to convert if to alterId
    }

    public static function convertAlterIdToId($id)
    {
        // some logic to alterId to id
    }   

    public function generateAlterId($tokenSize = 32)
    {
        // logic to generate alter id ftom time stamp or something like that...
    }

}

, который автоматически генерирует alterId и имеет возможность конвертировать из одного в другой.

Моя проблема заключается в том, что когда я пытаюсь заполнить какой-то элемент этой расширенной моделью, ничего не происходит, нетошибки и отсутствие вставленных данных в базу данных.

Для посева я использую эту модель

namespace App;

use Illuminate\Database\Eloquent\Model;

use \App\NewModel;

class TestModel extends NewModel
{
    protected $fillable = ['name']; 

    protected $dates = ['created_at', 'updated_at'];

}

это простая фабрика:

use Faker\Generator as Faker;

$factory->define(App\TestModel::class, function (Faker $faker) {
    return [
        'name' => $faker->firstNameMale,
        'created_at' => \Carbon\Carbon::now(), 
        'updated_at' => \Carbon\Carbon::now()
    ];
});

и сеялка:

use Illuminate\Database\Seeder;

use \App\TestModel;

class TestModelsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //truncate
        TestModel::truncate();

        //create
        factory(TestModel::class, 100)->create();
    }
}

Как я уже говорил, при запуске команды

php artisan migrate:refresh --seed

ничего не происходит, даже ошибки не отображается.Но если я изменяю код и изменяю TestModel так, чтобы он наследовал модель вместо NewModel, то все работает нормально, база данных получает вставки!

Что я сделал не так в этом коде?

1 Ответ

0 голосов
/ 07 октября 2018

Я не пытался запустить ваш код, но я думаю, вам нужно сделать его заполняемым:

protected $fillable = ['name','alterId']; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...