【问题标题】:Laravel Observer Create Working but Delete Not WorkingLaravel 观察者创建工作但删除不工作
【发布时间】:2018-10-06 08:33:36
【问题描述】:

我正在尝试使用观察者删除关系,但问题是当我在创建的函数中 DD 时它工作正常,但当我在删除的函数中 DD 时它什么都不显示(邮递员)意味着同样的一切既不工作也不出错

这里是 API:

$api->post('store','App\Http\Controllers\CustomerController@store');
$api->delete('delete/{id}','App\Http\Controllers\CustomerController@destroy');

这是工匠制作的观察者文件

namespace App\Observers;

use App\Customer;

class CustomerObserver
{
    public function created(Customer $customer)
    {
        dd($customer);  
    }

    public function deleted(Customer $customer)
    {
        dd($customer); 
    }
}

这里是客户控制器

class CustomerController extends Controller
{
    public function store(Request $request)
    {
        return Customer::store($request->person);
    }

    public function destroy($id)
    {
       $delete = Customer::where('person_id',$id);
       $delete->delete();
    }
}

这是客户模型文件。

class Customer extends Model
{
    //Relationship Start From Here
    public function person()
    {
        return $this->belongsTo(Person::class);
    }

    //End Here

    public static function store($request)
    {
        //Call to Person Model And Save User
        $user = Person::store($request);

        //Create object of Customer Model
        $customer = new Customer();
        $customer->fill($request['customers']);
        $customer->person()->associate($user)->save();

        //return customer 
        return $customer;
    }
}

【问题讨论】:

  • deleted之后没有customerdd()
  • 感谢您的回复..我也试过这个,但如果我在 CustomerServiceProvider 中 DD 然后显示 DD,同样没有响应... public static function boot() { dd(1);客户::观察(客户观察者::类); }

标签: php laravel laravel-5


【解决方案1】:

我知道这可能是一个迟到的回复,不确定您是否仍在寻找答案。我认为问题在于如何删除 Customer 模型。

当你做类似的事情时

$delete = Customer::where('person_id',$id);
$delete->delete();

您正在执行批量删除语句。如laravel documentmass deletes will not fire any model events for the models that are deleted 中所述,这就是您的deleted 观察者事件没有触发的原因。

当通过 Eloquent 执行批量删除语句时,删除和删除模型事件不会为已删除模型触发。这是因为在执行 delete 语句时,模型从未真正被检索到

现在看看如何创建Customer。您一次创建一个模型。因此,您的 created 观察者确实会运行。

//Create object of Customer Model
$customer = new Customer();
$customer->fill($request['customers']);
$customer->person()->associate($user)->save();

要解决你的问题,最简单的方法就是把所有模型都找回来,一个一个删除,这样你就可以触发事件了。

foreach (Customer::where('person_id',$id)->get() as $delete) {
   $delete->delete();
}

【讨论】:

    【解决方案2】:

    我也遇到了这个问题,但是我从存储库中调用了删除方法,这阻止了观察者的删除事件被触发。当我从模式中使用删除时,它工作正常。

    【讨论】:

      【解决方案3】:

      你能做所有的事情

      1 在 boot 方法中的 CustomerServiceProvider 中的 Customer::observe(CustomerObserver::class); 添加行

      1. 在provider数组的app.php文件中添加CustomerServiceProvider

      2. composer dump-autoload

      3. php artisan config:cache

      【讨论】:

      • 已更改,但问题与其他任何检查天气此功能是否正常工作的方法相同.....如果为其他模型编写代码 public function delete(Customer $customer) { dd($customer) ; }
      • 我尝试使用 PersonObserver 和 Person Model 但也有同样的问题
      • 谢谢先生,很抱歉更新晚了......我使用了 config:cache 并使用了 softdeletes
      • @Minkzsingh 没问题兄弟
      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 2011-04-14
      • 2013-01-30
      • 2017-12-04
      • 2015-03-31
      • 2015-02-14
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多