我的模型中有以下事件处理程序:
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//...
public static function boot()
{
parent::boot();
static::saving(function ($user) {
// die('inside');
if (empty($user->username)) {
$base = strtolower($user->first_name . '.' . $user->last_name);
do {
$username = $base . @$suffix;
$duplicate = User::where('username', '=', $username)->first();
} while($duplicate and $suffix = rand(1000, 9999));
// return the original/ generated username
$user->username = $username;
}
});
}
}
基本上,当未设置用户名时,模型将自动从名字/姓氏生成唯一的用户名。这在浏览器中工作正常。但是当我运行我的测试时没有在CLI中 - 没有设置用户名,所以它试图插入没有我的mysql表不接受的用户名。
以下是我如何设置Eloquent控制台:
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'database' => 'sso_dev',
'username' => 'root',
'password' => 'vagrant1',
]);
$capsule->setEventDispatcher( new \Illuminate\Events\Dispatcher( new \Illuminate\Container\Container ));
$capsule->bootEloquent();
$capsule->setAsGlobal();
Web环境和测试都使用相同的代码。如果我对行setEventDispatcher
发表评论,那么浏览器环境会抛出错误,因为事件处理程序不会触发。所以我知道事件调度员正在那里做它的工作。只是没有测试CLI环境。这可能是什么原因?
顺便说一句,我正在使用Eloquent 5.3。
答案 0 :(得分:0)
启动时,您将需要再次调用setEventDispatcher。
public static function boot(){
parent::boot();
static::setEventDispatcher(new \Illuminate\Events\Dispatcher());
static::saving(function ($model){
// now you can reference your model
}
}