Почему мой начальный скрипт для Laravel 4 генерирует неправильные запросы на вставку?

Я начал работать с Laravel 4 и был озадачен странной проблемой. Я написал свои миграции для таблицы, которая успешно создает таблицу.

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateOrgRoles extends Migration {
protected $tableName ;

function __construct(){
$this->tableName = "org_roles";
}
public function up()
{
Schema::dropIfExists($this->tableName);
Schema::create($this->tableName, function(Blueprint $table)
{
$table->increments('id');
$table->string('role_name')->unique();
$table->mediumText('role_description')->nullable();
$table->timestamps();
});
}

public function down(){
Schema::drop($this->tableName);
}
}

Затем я приступил к написанию простой модели для таблицы как OrgRole.php

<?php

class OrgRole extends Eloquent {
protected $tableName;
protected $fillable = ['role_name', 'role_description'];

function __construct(){
$this->tableName = 'org_roles';
}
}

Затем я написал семя для файла, как показано ниже

<?php

class OrgRolesTableSeeder extends Seeder {

protected $tableName;

function __construct(){
$this->tableName = "org_roles";
}

public function run() {
$defaultRoles = array(
[
'role_name'            =>    'guest',
'role_description'     =>    'the most basic one of all'
]
);

foreach ( $defaultRoles as $role ) {
OrgRole::create( $role );
}
}

}

Теперь, когда я запускаю команду seed, сформированный запрос вставки неверен, и заполнение завершается неудачно

» php artisan db:seed
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1364 Field 'role_name' doesn't have a default value (SQL: insert into `or
g_roles` (`updated_at`, `created_at`) values (2014-09-21 01:57:14, 2014-09-21 01:57:14))

[PDOException]
SQLSTATE[HY000]: General error: 1364 Field 'role_name' doesn't have a default value

Может кто-нибудь помочь мне понять, что я делаю не так?

0

Решение

  1. Удалите конструкторы из ваших файлов сеялки и модели. Это не нужно в сеялке, так как вы называете модель OrgRole в run() метод.

  2. В файле модели замените protected $tableName; с
    protected $table = 'org_roles';,

Тогда попробуйте запустить php artisan db:seed снова. (Убедитесь, что вы удалили все записи, которые уже были посеяны, или уникальное требование role_name приведет к неудаче посева.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]