我正在与laravel合作。我正在使用Cartalyst-Sentinel。如何从数据库的用户表的first_name + last_name中添加子弹
我为“角色”表添加了子弹,但是我不知道如何通过添加first_name和last_name在“用户”表的“子弹”列中添加值。例如:first_name =“ JOHN”,last_name =“ CENA”,slug =“ JOHN-CENA”
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('password');
$table->string('birthday')->nullable();
$table->string('gender')->nullable();
$table->text('permissions')->nullable();
$table->timestamp('last_login')->nullable();
$table->string('first_name')->nullable();
$table->string('last_name')->nullable();
$table->string('slug');
$table->timestamps();
$table->engine = 'InnoDB';
$table->unique('email');
$table->unique('slug');
});
DB::table('roles')->insert(array(
array('id'=>1, 'slug'=> 'admin', 'name'=> 'Admin', 'permissions'=> NULL),
array('id'=>2, 'slug'=> 'user', 'name'=> 'User', 'permissions'=> NULL)
)
);
答案 0 :(得分:0)
我不确定为什么首先要在用户表中有一个子弹列,但是您可以在插入/更新用户时自动设置子弹,可以使用Laravel model events或Laravel observers。您感兴趣的事件是saving
事件,该事件在更新/在数据库上创建用户之前被调用。
或者,您也可以使用Laravel mutators,以便在设置first_name或last_name属性时,也可以更新slug属性。
此外,您可以使用Laravel的辅助方法str_slug()。可以将字符串转换为子段。
下面是观察者的示例:
app / Observers / UserObserver.php
namespace App\Observers\UserObserver;
use Cartalyst\Sentinel\Users\EloquentUser;
class UserObserver
{
public function saving(EloquentUser $user)
{
$user->slug = str_slug($user->first_name . ' ' . $user->last_name);
}
}
app / Providers / AppServiceProvider.php
namespace App\Providers;
use Cartalyst\Sentinel\Users\EloquentUser;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
EloquentUser::observe(UserObserver::class);
}
}
现在在任何地方都可以执行以下操作:
$user = Sentinel::register([
'first_name' => 'John',
'last_name' => 'Cena',
'email' => 'JohnCena@example.com'
'password' => 'justanexample'
]);
或
$user->save();
用户信息也将被保存。