I need to update an existing migration by adding only onDelete('cascade'); - laravel

I need your help. Days ago I created the following migration:
2022_07_28_144638_create_projects_table.php
Obviously it is not the last because I have created several. Now I have added onDelete ('cascade') on the following line:
$table-> foreign('client_id') -> references('id') -> on('clients') -> onDelete('cascade');
so since it was added after now I have to do a migrate on the same migration again.
I need to figure out how to do this. I'm new to Laravel.

If you are in the local environment, you should use the following command.
php artisan migrate:rollback
then update migration code
$table->foreignId('client_id')->references('id')->constrained('clients')->cascadeOnDelete();
then
php artisan migrate

Related

Seeder already exists in Laravel

I migrated the table. Also, I created a seeder and using DB class to seed it. However, I am getting an error Seeder already exists. I used php artisan clear-compiled,
composer dump-autoload, php artisan optimize before running it. Please help me.
if i will run php artian make:seed TestSeeder and TestSeeder class or file already created in seeds/ folder then this error will occur Seeder already exists in Laravel.
Remove old file in seeds/ folder and make new seeder .

Adding column using make migration command error

I'm trying to add an icon_path column to an existing table called tbl_device
by using php artisan make:migration add_icon_path_to_tbl_device_table --table=tbl_device
and after running php artisan migrate, it gives me this error.
PHP Fatal error: Cannot declare class CreateFailedJobsTable, because the name is already in use in ...path\database\migrations\<date>_create_failed_jobs_table.php
Cannot declare class CreateFailedJobsTable, because the name is already in use
I've also tried manually adding the icon_path column to the create_tbl_device_table.php migration and after running php artisan migrate it says Nothing to migrate.
I think I followed all the instructions.. any idea where I went wrong?
Call artisan migrate command only for your specific migration using:
php artisan migrate --path=/database/migrations/my_migrations
And see if it works.

no php artisan commands are working after new migration

I am new to laravel .
Following tutorial videos on laracast,i made a new migration (cmd command) like following
php artisan make:migration delete_title_from_posts_table
which gave me the message
Created Migration: 2020_02_05_185721_delete_title_from_posts_table
after that no php artisian command is working in cmd.
Any command i run gives me the following error
In Container.php line 805:
Target class [db] does not exist.
In Container.php line 803:
Class db does not exist
what would be causing this?
my laravel app version=6.2 and php version=7.3.5 on Win10 64-bit.
similar questions i already viewed,not working for me
artisan-commands-not-working-after-composer-update
in-container-php-line-805-target-class-db-does-not-exist
Since it's a facade, add this to the top of the class to make it work:
use DB;
Or use full namespace:
$tables = \DB::table...
run these commands steps by step:
composer dump-autoload clean up all compiled files and their paths
composer update --no-scripts Skips execution of scripts defined in composer.json
composer update update your project's dependencies

Error while migrating from Laravel tinker console (sqlite)

Consider
laravel new bug
Then adding in .env
DB_CONNECTION=sqlite
DB_DATABASE=/home/me/Code/bug/storage/database.sqlite
creating database
touch /home/me/Code/bug/storage/database.sqlite
migrating
php artisan migrate && php artisan migrate:fresh
Now trying to migrate programmatically in tinker
php artisan tinker
>> Artisan::call('migrate');
First time resulting in => 0 (as expected ?) But second time:
>>> Artisan::call('migrate:fresh')
Illuminate\Database\QueryException with message 'SQLSTATE[HY000]:
General error: 17 database schema has changed (SQL: select * from
sqlite_master where type = 'table' and name = migrations)'
Artisan::call('migrate')
Third time:
Symfony\Component\Console\Exception\CommandNotFoundException with
message 'There are no commands defined in the "migrate" namespace.'
Any ideas whats going on here? Can you reproduce?
Update using postgres. The second time running Artisan::call('migrate:fresh') I get:
Symfony\Component\Console\Exception\CommandNotFoundException with
message 'There are no commands defined in the "migrate" namespace.'
UPDATE 2: Issue filed here: https://github.com/laravel/framework/issues/22997
https://github.com/laravel/tinker/issues/37
I don't think if this is a laravel bug, but I found your problem:
Calling a non existing command like Artisan::call('migrate:fresh') will crash. The reason is a typo: tinker does not accept fresh, only refresh. Calling the command via tinker will empty the sqllite file so you can't execute any commands until you migrate without tinker.
Here are my steps:
php artisan migrate # sqllite file is filled with content
php artisan tinker
> Artisan:call('refresh')
> Artisan::call('fresh') # now the sqllite file is empty
> Artisan::call('migrate') # will crash
php artisan migrate
> Artisan::('refresh') # works
so I think it's a tinker bug, not a laravel one. Tinker is doing some kind of snapshot (If you change a Model you have to restart tinker to call it there), maybe the error handling is not implemented is the best way to catch all errors.

Laravel migrations messed up

I meesed up my Laravel migrations and I get PHP Fatal error: Cannot redeclare Class when running
php artisan migrate --path="workbench/fefe/feeds2go/src/migrations"
I have been deleting the migration file and dropping manually the table and recreated with php artisan migrate:make but still the same.
How can I fix migratons?
You need to check all of your migration class files and check for duplicate class names.
"Cannot redeclare class" happens when the class name appears at least
2 times.
The easiest way to do it is to run either composer install or composer.phar dump-autoload. It will generate warning information for you to identify which class is duplicated. Then, simply remove the class that declared twice.
Here is the error I got after I ran php artisan migrate
[Symfony\Component\Debug\Exception\FatalErrorException]
Cannot redeclare class CreateKidTimeslotTable
Therefore, I use composer.phar dump-autoload to identify the error.
Warning: Ambiguous class resolution, "CreateKidTimeslotTable" was found in both "laravel/database/migrations/2016_05_23_024341_create_kid_timeslot_table.php" and "laravel/database/migrations/2016_08_24_022635_create_kid_time_slot_table.php", the first will be used.
Remove the duplicated table that you don't need anymore.
You need to delete that migration file manually from the migration directory of your project and also, delete it's entry from the migration table in the database or you can run the php artisan migrate:refresh but it will drop your all table data so also add the your step with php artisan migrate:refresh --step=n
This is a late answer, but probably this would solve your issue.
Go to app/storage/migrations.
Delete the migration file that causes the error (You can also delete everything stored there).
Done.

Resources