Dando erro no comando 'php artisan migrate'

Fala pessoal, como vão?

Meu primeiro post aqui com uma dúvida que pesquisei e não foi encontrado. Se foi, me perdoa e coloa o link para tirar a minha dúvida.

Estou criando um projeto de encurtador de link pelo PHP. Já tentei de diversas maneiras e não consegui. O sistema que crio é via Linux pelo VS Code. Abaixo vou mostrar o erro que acontece.

lucianogr@lucianogr-Inspiron-15-3520:~/Projects/shortlink/shortlink$ php artisan migrate Route::get('/', function () { return view('welcome'); });

Route::post('/shorten', [App\Http\Controllers\ShortLinkController::class, 'store'])->name('shorten'); Route::get('{shortCode}', [App\Http\Controllers\ShortLinkController::class, 'show'])->name('shortlink.show');

Illuminate\Database\QueryException

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = shortlinkdb and table_name = migrations and table_type = 'BASE TABLE')

at vendor/laravel/framework/src/Illuminate/Database/Connection.php:712 708▕ // If an exception occurs when attempting to run a query, we'll format the error 709▕ // message to include the bindings with SQL, which will make this exception a 710▕ // lot more helpful to the developer instead of just the database's errors. 711▕ catch (Exception $e) { ➜ 712▕ throw new QueryException( 713▕ $query, $this->prepareBindings($bindings), $e 714▕ ); 715▕ } 716▕ }

  +33 vendor frames

34 artisan:37 Illuminate\Foundation\Console\Kernel::handle()

Algumas coisas já foram feitas, porém o erro persiste: Arquivo .env: Credenciais e nome do banco de dados estão corretos. Arquivo config/database.php: Configurações revisadas para assegurar que estão correspondendo ao .env. MySQL: Verificado que o servidor está rodando corretamente e aceitando conexões com o script de teste. Privilégios: Confirmamos que o usuário root tem todos os privilégios necessários.

Estou me acostumando pelo Linux e em inglês que é bem diferente do Windows, onde utilizo há mais de 20 anos.

E o PHP que é o meu primeiro projeto que faço e quero criar outros pela linguagem.

Quem pode me ajudar, por favor?

Se precisar de mais informações, pode comentar abaixo.

Obrigado.

Mano, erro de conexao com o banco de dados, esta dizendo é com a senha ou o usuario errados, bem alto explicativo o erro Access denied for user 'root'@'localhost' (using password: YES)

ribeiroG opa meu caro, como vai? Então fiz de tudo como descrevi e continua com erro. Até tentei depois comentar o kernel.php e piorou deu mais erros. Peço um pouco de paciência que, apesar de já conhecer programação e Linux, é a primeira vez que faço algum programa pelo Linux e pelo PHP. Eu sempre programei pelo Windows, então estou sofrendo um pouco.
kkkk mano to calmo, mas o erro esta na conexao no banco de dados, se tiver discord eu te dou uma mao
ribeiroG opa, eu fiz até a conexão e testei. Está tudo OK. Vou verificar meu usuário no Discord e te envio o meu usuário lá. Autalizado: @ribeiroG o meu usuário no Discord é lgomesroc

Laravel é um pouco chato de subir para deploy até pegar o jeito certo, recomendo que utilize a biblioteca Lamp do Teddysun que automatiza todo processo de subir apache e mysql sem erros https://github.com/teddysun/lamp

Opa kairodev, como vai? Então nunca utilizei. Mas vou estudar um pouco sobre o Teddysun conforme mencionou. Obrigado pela ajuda.

Pode ser 2 coisas: 1 - Usuario e senha errados no .env 2 - Você não rodou o comando php artisan migrate

Opa rpaggi, Como vai? Usuário e senha corretos e executei sim o comando php artisan migrate. Valeu por ajudar.

Meu caro, isso é problema de conexão com o banco. Para testar, ao invés de usar o MySQL, use o SQLite. No seu .env, você deve alterar a variável DB_CONNECTION para sqlite e comentar as outras. Ficaria assim:

DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=sua_base
#DB_USERNAME=root
#DB_PASSWORD=admin

Após isso, rode o php artisan optimize:clear para pegar as configurações novas, e rode o php artisan migrate:fresh.

O próprio Laravel vai criar o banco no caminho (seu projeto)/database/database.sqlite.

Se funcionar é porque o problema está, provavelmente, na senha do seu root mysql. Nesse caso, você pode tentar entrar pelo terminal na ferramenta do mysql: m̀ysql -u root -p

Entendi silvestrini. Vou tentar e valeu pela ajuda. Se der certo ou não, posto aqui.
Tranquilo, tem duas comunidades do discord sobre Laravel que eu recomendo você a entrar: Beer and Code, Turma do Tio Jobs. Sempre tem alguém lá pra tirar as dúvidas e ajudar. https://discord.gg/rCQ63Z3D https://discord.com/invite/mhyKFgv
Opa silestrini, não deu certo meu caro. Veja no que deu: ```sh lucianogr@lucianogr-Inspiron-15-3520:~/Projects/shortlink/shortlink$ php artisan migrate:fresh Route::get('/', function () { return view('welcome'); }); Route::post('/shorten', [App\Http\Controllers\ShortLinkController::class, 'store'])->name('shorten'); Route::get('{shortCode}', [App\Http\Controllers\ShortLinkController::class, 'show'])->name('shortlink.show'); Illuminate\Database\QueryException Database (shortlinkdb) does not exist. (SQL: PRAGMA foreign_keys = ON;) at vendor/laravel/framework/src/Illuminate/Database/Connection.php:712 708▕ // If an exception occurs when attempting to run a query, we'll format the error 709▕ // message to include the bindings with SQL, which will make this exception a 710▕ // lot more helpful to the developer instead of just the database's errors. 711▕ catch (Exception $e) { ➜ 712▕ throw new QueryException( 713▕ $query, $this->prepareBindings($bindings), $e 714▕ ); 715▕ } 716▕ } +41 vendor frames 42 artisan:37 Illuminate\Foundation\Console\Kernel::handle() lucianogr@lucianogr-Inspiron-15-3520:~/Projects/shortlink/shortlink$ php artisan migrate Route::get('/', function () { return view('welcome'); }); Route::post('/shorten', [App\Http\Controllers\ShortLinkController::class, 'store'])->name('shorten'); Route::get('{shortCode}', [App\Http\Controllers\ShortLinkController::class, 'show'])->name('shortlink.show'); Illuminate\Database\QueryException Database (shortlinkdb) does not exist. (SQL: PRAGMA foreign_keys = ON;) at vendor/laravel/framework/src/Illuminate/Database/Connection.php:712 708▕ // If an exception occurs when attempting to run a query, we'll format the error 709▕ // message to include the bindings with SQL, which will make this exception a 710▕ // lot more helpful to the developer instead of just the database's errors. 711▕ catch (Exception $e) { ➜ 712▕ throw new QueryException( 713▕ $query, $this->prepareBindings($bindings), $e 714▕ ); 715▕ } 716▕ } +35 vendor frames 36 artisan:37 Illuminate\Foundation\Console\Kernel::handle() lucianogr@lucianogr-Inspiron-15-3520:~/Projects/shortlink/shortlink$ ``` O ,env mudei assim e salvei. ``` DB_CONNECTION=sqlite DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=shortlinkdb DB_USERNAME=root DB_PASSWORD=5577azcD@# ```
Sim, mas viu como mudou o erro, antes era problema com a senha, agora tá falando que o banco não existe. Isso vai se resolver assim que você comentar todas essas linhas que começam com DB, com exceção da primeira sqlite. Quando se usa SQLite, não se define nome do banco, porta, usuário e senha, pois cada arquivo .sqlite é um banco. É só comentar como eu disse no comentário anterior e já vai funcionar bem. Assim: ```php DB_CONNECTION=sqlite #DB_HOST=127.0.0.1 #DB_PORT=3306 #DB_DATABASE=sua_base #DB_USERNAME=root #DB_PASSWORD=admin ```
Consegui. Consegui realizar. veja: lucianogr@lucianogr-Inspiron-15-3520:~/Projects/shortlink/shortlink$ php artisan migrate Route::get('/', function () { return view('welcome'); }); Route::post('/shorten', [App\Http\Controllers\ShortLinkController::class, 'store'])->name('shorten'); Route::get('{shortCode}', [App\Http\Controllers\ShortLinkController::class, 'show'])->name('shortlink.show'); Nothing to migrate. Além do SQLite, ainda estava dando erro no Apache pois o NGinx também estava instalado (fui eu mesmo que instalei os dois porque se um der erro, utilizo o outro servidor). Desinstalei o Nginx para tirar o conflito, ele estava sendo carregado na porta 80 e aí iniciei o Apache. O ambiente é desenvolvimento sim. Cara muito obrigado fiz como você indicou e deu certo. Vivendo e aprendendo.
Laravel exige uma configuração um pouco mais chatinha de Nginx, [aqui está o tutorial de como fazer](https://laravel.com/docs/11.x/deployment#nginx), mas uso apache também por me atender bem. No caso você não precisava desinstalar, era só desabilitar com o comando `sudo systemctl disable nginx`, mas ok. Ao invés de fazer ```php Route::post('/shorten', [App\Http\Controllers\ShortLinkController::class, 'store'])->name('shorten'); Route::get('{shortCode}', [App\Http\Controllers\ShortLinkController::class, 'show'])->name('shortlink.show'); ``` Você pode simplismente [agrupar as rotas que usam o mesmo controller](https://laravel.com/docs/11.x/routing#route-group-controllers), assim: ```php Route::controller(ShortLinkController::class)->group(function(){ Route::post('/shorten', 'store')->name('shorten'); Route::get('{shortCode}', 'show')->name('shortlink.show'); }); ``` Dá pra melhorar ainda mais com [resource controller](https://laravel.com/docs/11.x/controllers#resource-controllers) e [route model binding](https://laravel.com/docs/11.x/routing#route-model-binding)...
Na questão do seu mysql, como acredito que esse banco é local para desenvolvimento, recomendo deixar uma senha fácil como admin, por exemplo. Você pode alterá-la com esses comandos abaixo. - Acessar o banco de dados como root: `sudo su root -c mysql` - Dentro da linha de comando do mysql, alterar senha do usuário para admin: `alter user 'root'@'localhost' identified by 'admin';` Pronto, agora é só testar.