php - Eloquent select using the wrong class?

Context: Trying to extend Laravel models from a database table. Table models linked to App\Models\BootableModel, App\Models\User extends this class.

I have the following code:

<?php
    class BootableModel extends Model
    {
        protected $table = 'models';

        protected $fillable = [
            'name',
            'class',
            'table',
        ];

        public function __construct(array $attributes = [])
        {
            $this->bootFromDatabase();
            parent::__construct($attributes);
        }

        private function bootFromDatabase()
        {
            $class = static::class;
            $bModClass = self::class;
            Log::debug($class);
            Log::debug($bModClass);
            //$bootableModel = DB::table('models')->where('class', $class)->first();
            $bootableModel = $bModClass::where('class', $class)->first();
            if(!$bootableModel) {
                return;
            }
            Log::debug($bootableModel->id);

The debug of $bModClass shows App\Models\BootableModel as expected (self vs static), but for some reason the $bModClass::where is trying to query the users table. Using a direct reference to App\Models\BootableModel::class does not change this, so it's not self::class that is the issue. The debug output as proof:

[2021-02-21 17:33:39] local.DEBUG: App\Models\User
[2021-02-21 17:33:39] local.DEBUG: App\Models\BootableModel

It should never try to access User::where(), and as such, it should never try to use User::$table either, but somehow it does.

Is Laravel doing some weird reflection, or is this normal PHP behavior? Is there a way around this?

Update:

I have found a workaround, but I'm not satisfied with this being the correct/only solution:

        public function __construct(array $attributes = [])
        {
            parent::__construct($attributes);
            static::bootFromDatabase();
        }

        public static function bootFromDatabase()
        {
            $class = static::class;
            $bModClass = self::class;
            if($class === $bModClass) {
                return;
            }

Answer

Solution:

Have you ever tried self::where(...) instead of $bModClass::where(...) ?

Similar situation:

class Base {
    public static function where()
    {
        return 'where from base';
    }
    
    public static function getName()
    {
        return self::where();
    }
}

class User extends Base {
    public static function where()
    {
        return 'where from user';
    }
}

echo User::getName();

Output: where from base

Source