我正在使用Observer进行删除。在我的项目中,我有两个表:contract_assets和action_logs。当我在contract_assets(contract_id,asset_id)中添加新行并使用Observer for Created将日志保存在action_logs表中时。工作正常!但是我删除了这一行,并使用“观察者”进行删除,该行不起作用。
这是合同资产模型:
final class ContractAsset extends SnipeModel
{
protected $presenter = 'App\Presenters\ContractAssetsPresenter';
protected $table = 'contract_assets';
protected $rules = [
'contract_id' => 'required',
'asset_id' => 'required',
'user_id' => 'required',
];
use ValidatingTrait;
use Searchable;
use Loggable, Presentable;
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = ['contract_id', 'asset_id', 'user_id', 'deleted_at'];
}
这是ContractAssets控制器:
public function destroy(Request $request)
{
$this->authorize('delete', ContractAsset::class);
$results = ContractAsset::select('contract_assets.id')
->where('contract_id', '=', $request->contract_id)
->where('asset_id', '=', $request->asset_id);
$results->delete();
$listAssets = ContractAsset::select([
'contract_assets.id',
'assets.id',
'assets.image',
'assets.name',
'assets.asset_tag'
])
->join('assets', 'assets.id', '=', 'contract_assets.asset_id')
->join('models', 'models.id', '=', 'assets.model_id')
->where("contract_assets.contract_id", '=', $request->contract_id)
->get();
return response()->json($listAssets);
}
这是ContractAsset Observer:
public function deleting(ContractAsset $contractAssets)
{
$logAction = new Actionlog();
$logAction->item_type = ContractAsset::class;
$logAction->item_id = $contractAssets->id;
$logAction->created_at = date("Y-m-d H:i:s");
$logAction->user_id = Auth::id();
$logAction->logaction('delete');
}
这是ActionLog模型:
class Actionlog extends SnipeModel
{
protected $presenter = "App\Presenters\ActionlogPresenter";
use SoftDeletes;
use Presentable;
protected $dates = [ 'deleted_at' ];
protected $table = 'action_logs';
public $timestamps = true;
protected $fillable = [ 'created_at', 'item_type','user_id','item_id','action_type','note','target_id', 'target_type' ];
use Searchable;
/**
* The attributes that should be included when searching the model.
*
* @var array
*/
protected $searchableAttributes = ['action_type', 'note', 'log_meta'];
public function logaction($actiontype)
{
$this->action_type = $actiontype;
if ($this->save()) {
return true;
} else {
return false;
}
}
}
当我删除contract_assets表中的行时,delete_at列已更新:
id | contract_id | asset_id | created_at | Updated_at | Deleted_at
140 | 42 | 11 | 2019-08-20 02:07:35 | 2019-08-20 02:07:38 | 2019-08-20 02:07:38
但是action_logs没有更新,此行已删除。
我用过composer dump-autoload
和php artisan config:cache
无效。