-
Notifications
You must be signed in to change notification settings - Fork 29
Description
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▕ {
111▕ if (! static::hasMacro($method)) {
➜ 112▕ throw 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
- Install https://github.com/glushkovds/phpclickhouse-laravel
- Create a config/database entry for 'clickhouse'
- Create a new model. Set
protected $connection = 'clickhouse' - Run
model:typercommand