为什么在Laravel中删除Observer无效

时间:2019-08-20 02:55:49

标签: laravel observers

我正在使用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-autoloadphp artisan config:cache无效。

0 个答案:

没有答案