Действительно странная проблема здесь. Я создаю администратора для моего сайта через \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');
}
}
Я нашел проблему. Я слушал вопросы благодаря 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
массив;)
Попробуйте это для прослушивания запросов:
DB::listen(function($sql, $bindings, $time)
{
//
});
Может произойти две вещи,
enum
значение не соответствует $fillable
массив