Min*_*ngh 6 php laravel laravel-5
我正在尝试使用观察者来删除关系,但问题是当我在创建的函数中执行 DD 时,它工作正常,但是当我在删除的函数中执行 DD 时,它什么也不显示(POSTMAN)意味着既不工作也不出错
这是 API:
$api->post('store','App\Http\Controllers\CustomerController@store');
$api->delete('delete/{id}','App\Http\Controllers\CustomerController@destroy');
Run Code Online (Sandbox Code Playgroud)
这是工匠制作的观察者文件
namespace App\Observers;
use App\Customer;
class CustomerObserver
{
public function created(Customer $customer)
{
dd($customer);
}
public function deleted(Customer $customer)
{
dd($customer);
}
}
Run Code Online (Sandbox Code Playgroud)
这是客户控制器
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是客户模型文件。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
我知道这可能是一个迟到的答复,不确定您是否仍在寻找答案。我认为问题在于如何删除模型Customer
。
当你做类似的事情时
$delete = Customer::where('person_id',$id);
$delete->delete();
Run Code Online (Sandbox Code Playgroud)
您正在执行批量删除语句。正如Laravel 文档中所述,这就是您的观察者事件未触发的mass deletes will not fire any model events for the models that are deleted
原因。deleted
通过 Eloquent 执行批量删除语句时,对于已删除的模型,不会触发删除和删除模型事件。这是因为执行删除语句时从未实际检索模型
现在看看如何创建Customer
. 您一次创建一个模型。因此你的created
观察者确实会运行。
//Create object of Customer Model
$customer = new Customer();
$customer->fill($request['customers']);
$customer->person()->associate($user)->save();
Run Code Online (Sandbox Code Playgroud)
要解决你的问题,最简单的方法就是检索所有模型并一一删除,这样就可以触发事件。
foreach (Customer::where('person_id',$id)->get() as $delete) {
$delete->delete();
}
Run Code Online (Sandbox Code Playgroud)
你能做所有事情吗
1 在 CustomerServiceProvider方法Customer::observe(CustomerObserver::class);
中添加行boot
添加CustomerServiceProvider
到app.php文件中的provider数组中
composer dump-autoload
php artisan config:cache
归档时间: |
|
查看次数: |
12956 次 |
最近记录: |