Тип enum Laravel 5 не работает при создании

Действительно странная проблема здесь. Я создаю администратора для моего сайта через \Console\Command и в какой-то момент я, очевидно, создаю это.

$user = User::create([

'first_name' => 'Admin',
'last_name' => 'Inistrator',
'phone' => '',

'email' => $email,
'password' => bcrypt($password),
'role' => 'admin',
]);

Результатом в моей базе данных является то, что аккаунт получил user роль вместо admin, но если я сделаю это

$user = User::create([

'first_name' => 'Admin',
'last_name' => 'Inistrator',
'phone' => '',

'email' => $email,
'password' => bcrypt($password),
'role' => 'admin',

]);

$user->role = 'admin';
$user->save();

Тогда это работает отлично. Я подозреваю, что Laravel 5 делает что-то странное, пока я создаю новую учетную запись, которая будет связана со всеми чертами и т. Д., Связанными с User модель … Что вы думаете?

PS: вот моя таблица миграции

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{

$table->increments('id');

$table->string('first_name');
$table->string('last_name');
$table->string('phone');
$table->string('email')->unique();
$table->string('password', 60);
$table->enum('role', ['user', 'business', 'admin']);

$table->rememberToken();
$table->timestamps();

});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{

Schema::drop('users');

}

}

1

Решение

Я нашел проблему. Я слушал вопросы благодаря DB::getQuerylog() (Я также мог бы использовать DB::listen как сказано в ответах)

Запрос:

    \DB::enableQueryLog();

$user = User::create([

'first_name' => 'Admin',
'last_name' => 'Inistrator',
'phone' => '',

'email' => $email,
'password' => bcrypt($password),
'role' => 'admin',

]);

dd(\DB::getQueryLog());

И результат:

array:1 [
0 => array:3 [
"query" => "insert into `users` (`email`, `password`, `updated_at`, `created_at`) values (?, ?, ?, ?)""bindings" => array:4 [
0 => "klklm"1 => "$2y$10$RUorxAp4EbN/7TvEmdk.dudBBb0dgUWhmAvRsjXgVFubhEKbaLR4K"2 => "2015-04-13 10:30:36"3 => "2015-04-13 10:30:36"]
"time" => 3.17
]
]

Поэтому я понял, что мои поля были просто проигнорированы. Я проверил модель и увидел, что забыл добавить поля в $fillable

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password'];

Я добавил другие поля, и это работает как шарм. Поэтому, если у кого-то возникла подобная проблема, решение довольно простое, не забудьте заполнить $fillable массив;)

4

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

Попробуйте это для прослушивания запросов:

DB::listen(function($sql, $bindings, $time)
{
//
});
1

Может произойти две вещи,

  1. либо ваш enum значение не соответствует
  2. или ваш столбец не добавлен в $fillable массив
1
По вопросам рекламы [email protected]