Я начал работать с 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
Может кто-нибудь помочь мне понять, что я делаю не так?
Удалите конструкторы из ваших файлов сеялки и модели. Это не нужно в сеялке, так как вы называете модель OrgRole
в run()
метод.
В файле модели замените protected $tableName;
с
protected $table = 'org_roles';
,
Тогда попробуйте запустить php artisan db:seed
снова. (Убедитесь, что вы удалили все записи, которые уже были посеяны, или уникальное требование role_name
приведет к неудаче посева.)
Других решений пока нет …