【问题标题】:how to Automatic insert record in the secondary table?如何在辅助表中自动插入记录?
【发布时间】:2021-08-01 14:23:09
【问题描述】:
大家好,这是我的表格结构:
reqest 和 Request_state :
我想在请求表中添加记录时自动在 Request_STATE 表中创建记录
request_state 存放Request Table的状态信息
你建议什么方法?
创建活动有意义吗?不使用触发器
【问题讨论】:
标签:
mysql
laravel
laravel-8
【解决方案1】:
您可以很容易地使用Laravel 中的内置模型事件来完成它,可以在模型boot() 方法上订阅该事件。保存后触发创建,您可以订阅多个事件以查看它们here。
use Illuminate\Database\Eloquent\Model;
class RequestState extends Model {
table = 'request_state';
public function request()
{
return $this->belongsTo(Request::class);
}
}
use Illuminate\Database\Eloquent\Model;
class Request extends Model {
public static function boot() {
static::created(function ($request) {
$requestState = new RequestState([
// your data
]);
$requestState->request->associate($request);
$requestState->save();
});
}
}
这只会在Laravel 模型中触发,但是当你这样做时,它会创建一个带有状态的新请求。
Request::create([]);
使用Listener 的替代方法可以获得相同的结果,但将逻辑移出模型。这是一个简单直接的解决方案,并且更容易维护,因为您不需要在侦听器中搜索逻辑。