Search code examples
laravelupdatingobservers

Laravel model observer method doesn't get fired


In my Laravel (7.x) I am trying to use Observers for updating device_inventories table if the value of the record if the record of the subscriber_devices table is updated as inactive.

device_inventories         |    subscriber_devices
-----------------------    |    --------------------------------
# | title    | status      |    # | device_inventory_id | status
-----------------------    |    --------------------------------
1 | device-1 | active      |    1 |                   1 | active
2 | device-2 | active      |    2 |                   2 | active

For example:
Suppose I update the record id = 2 of subscriber_devices to status = inactive then the value of device_inventories / status should be updated to replacement. Assuming, that the device was damaged and needs to be sent for replacement.

AppServiceProvider.php

use App\SubscriberDevice;
use App\Observers\ObserverChangeDeviceInventoryStatusToReplacement;

class AppServiceProvider extends ServiceProvider
{
   public function boot()
   {
     SubscriberDevice::observe(ObserverChangeDeviceInventoryStatusToReplacement::class);
   }
}

App\Observers\ObserverChangeDeviceInventoryStatusToReplacement.php

use App\DeviceInventory;
use App\SubscriberDevice;

class ObserverChangeDeviceInventoryStatusToReplacement
{
   public function updated(SubscriberDevice $SubscriberDevice)
   {
      DeviceInventory::where('id', $SubscriberDevice->device_inventory_id)->update([
         'status' => 'replacement'
      ]);
   }
}

App\SubscriberDevice.php

class SubscriberDevice extends Model
{
   protected $table = 'subscriber_devices';

   public function _status($token, $reason)
   {
      self::where('token', $token)->update([
         'reason' => $reason,
         'status' => 'inactive',
      ]);
   }
}

The observer method doesn't seems to be firing. What am I doing wrong.?


Solution

  • Thanks to @EmptyBrain.

    App\SubscriberDevice.php

    class SubscriberDevice extends Model
    {
       protected $table = 'subscriber_devices';
    
       public function _status($token, $reason)
       {
          $self = self::where('token', $token)->first();
    
          $self->update([
             'reason' => $reason,
             'status' => 'inactive',
          ]);
       }
    }
    

    Reference laravel Eloquent model update event is not fired