Skip to content

[BUG] Using non-standard database driver for one model causes the command to fail. #69

@nonetallt

Description

@nonetallt

What happened?

The Problem

I specified a "clickhouse" connection for one of my models using the laravel clickhouse db driver. Now whenever I run the model:typer command, it results in the following error in the output:

   BadMethodCallException 

  Method PhpClickHouseLaravel\Connection::getDoctrineDriver does not exist.

  at vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php:112
    108▕      */
    109▕     public function __call($method, $parameters)
    110▕     {
    111if (! static::hasMacro($method)) {
  ➜ 112throw new BadMethodCallException(sprintf(
    113'Method %s::%s does not exist.', static::class, $method
    114▕             ));
    115▕         }
    116▕

  i   Bad Method Call: Did you mean PhpClickHouseLaravel\Connection::getDoctrineColumn() ? 

      �[2m+41 vendor frames �[22m

  42  artisan:35
      Illuminate\Foundation\Console\Kernel::handle()

It seems pretty obvious that the underlying model:show command relies on getDoctrineDriver(), which might not exist for all database drivers.

The Solution

It seems like try-catching for this scenario is not viable, considering the highly generic type of the BadMethodCallException, where catching it might result in unintentionally hiding errors with a different cause.

The first solution that comes to mind would be to implement a feature to ignore certain models (or models with a certain connection type). This should be very straightforward given that the GetModels action already supports exclusion of certain models (the parameters are simply not utilized currently).

Model exclusion could be implemented as either config or command option. Do you happen to have any preference for either approach or would you suggest and entirely different solution to begin with?

Expected Behavior

Model types are generated as normal.

Steps To Reproduce

  1. Install https://github.com/glushkovds/phpclickhouse-laravel
  2. Create a config/database entry for 'clickhouse'
  3. Create a new model. Set protected $connection = 'clickhouse'
  4. Run model:typer command

Metadata

Metadata

Assignees

No one assigned

    Labels

    StalebugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions