Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[10.x] Drop the primary key if it exists when adding a new primary key #49392

Merged
merged 2 commits into from Dec 18, 2023
Merged

[10.x] Drop the primary key if it exists when adding a new primary key #49392

merged 2 commits into from Dec 18, 2023

Conversation

KieranFYI
Copy link
Contributor

When attempting to change the primary key for a table, if one already exists this causes an error 1068. Attempting to use dropPrimary() along with primary() causes error 1075, due to primary and dropPrimary being two different commands.

The fix attempts to drop the PRIMARY index if it does exist.

@GrahamCampbell
Copy link
Member

I don't think it is a good idea to implicitly do this. This could cause major issues for people.

@KieranFYI
Copy link
Contributor Author

Care to explain why it's going to cause a major issue?

@taylorotwell
Copy link
Member

@KieranFYI can you provide an example of how this would be used in a migration?

@KieranFYI
Copy link
Contributor Author

KieranFYI commented Dec 15, 2023

@taylorotwell This is the code used to discover the issue. Was moving from a single primary index (id) to a multi column index due to needing the autoincrement constrained.

The specific line is as below.
$table->primary(['id', 'ticket_category_id', 'parent_type', 'parent_id']);

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('ticket_users', function (Blueprint $table) {
            $table->dropConstrainedForeignId('ticket_id');
        });

        Schema::table('tickets', function (Blueprint $table) {
            $table->string('key')
                ->unique()
                ->index()
                ->first();

            $table->foreignId('ticket_category_id')
                ->after('user_id')
                ->constrained('ticket_categories')
                ->cascadeOnUpdate()
                ->restrictOnDelete();

            $table->primary(['id', 'ticket_category_id', 'parent_type', 'parent_id']);
        });

        Schema::table('ticket_users', function (Blueprint $table) {
            $table->string('ticket_key')
                ->after('id')
                ->references('key')
                ->on('tickets')
                ->cascadeOnUpdate()
                ->cascadeOnDelete();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('ticket_users', function (Blueprint $table) {
            $table->dropColumn('ticket_key');
        });
        
        Schema::table('tickets', function (Blueprint $table) {
            $table->primary(['id']);
        });

        Schema::table('tickets', function (Blueprint $table) {
            $table->dropColumn(['key']);
            $table->dropConstrainedForeignId('ticket_category_id');
        });

        Schema::table('ticket_users', function (Blueprint $table) {
            $table->foreignId('ticket_id')
                ->after('id')
                ->constrained('tickets')
                ->cascadeOnDelete()
                ->cascadeOnUpdate();
        });
    }
};

@vanodevium
Copy link

IMHO, either this behavior should be for all SQL databases, or it should be a separate method.

@lukehebb
Copy link

Would it not be better to make this opt-in rather than a default?

For example if you you can add something such as this:

$table->primary([...])->dropIfExists();

Retain the existing default behaviour but allow opting in if necessary

@KieranFYI
Copy link
Contributor Author

@vanodevium From my understanding, this fix should work across the other SQL databases, but as i only use MySQL/MariaDB i'm unable to test the other options. If you'd be able to fix this, it would be welcome.

@lukehebb SQL by default only supports one primary index, So this isn't changing any behaviour except fixing a bug with Laravel.

@vanodevium
Copy link

There is not bug.
It is security: if you want to make new primary index, please remove old firstly.

@KieranFYI
Copy link
Contributor Author

KieranFYI commented Dec 15, 2023

@vanodevium That would involve dropping the column too due to autoincrement, which is alot of effort just to update the index and would destroy any relations already using that id. Attempting to just drop the primary results in the following error.

Updated snippt from the original code.

        Schema::table('tickets', function (Blueprint $table) {
            $table->dropPrimary();
        });

        Schema::table('tickets', function (Blueprint $table) {
            $table->string('key')
                ->unique()
                ->index()
                ->first();

            $table->foreignId('ticket_category_id')
                ->after('user_id')
                ->constrained('ticket_categories')
                ->cascadeOnUpdate()
                ->restrictOnDelete();

            $table->primary(['id', 'ticket_category_id', 'parent_type', 'parent_id']);
        });
$ php artisan migrate

   INFO  Running migrations.

  2023_12_03_163800_update_tickets_table ................................................................................................. 11ms FAIL

   Illuminate\Database\QueryException

  SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key (Connection: mysql, SQL: alter table `tickets` drop primary key)

  at vendor\laravel\framework\src\Illuminate\Database\Connection.php:822
    818▕                     $this->getName(), $query, $this->prepareBindings($bindings), $e
    819▕                 );
    820▕             }
    821▕
  ➜ 822▕             throw new QueryException(
    823▕                 $this->getName(), $query, $this->prepareBindings($bindings), $e
    824▕             );
    825▕         }
    826▕     }

  1   vendor\laravel\framework\src\Illuminate\Database\Connection.php:580
      PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key")

  2   vendor\laravel\framework\src\Illuminate\Database\Connection.php:580
      PDOStatement::execute()

@vanodevium
Copy link

Ok. Thanks. I see your point.

I would insist on $table->primary([...])->dropIfExists(); and only when this option then it have to make query with sub-query

drop index if exists `PRIMARY`,

@KieranFYI
Copy link
Contributor Author

KieranFYI commented Dec 15, 2023

@vanodevium I was hoping to approach this using that method, but i don't have the time or the energy to write all the code and tests required for all the different aspects of laravel for 31 characters.

@taylorotwell
Copy link
Member

I'm having a bit of a hard time understanding the fears around this PR.

You have a migration that declares a primary key.

You later write a migration that declares a new primary key. A table can only have one primary key so the primary key is moved to your new declaration.

That seems... kinda fine? What am I missing?

@vanodevium
Copy link

This code is a "hundred years" old.
Everyone used it and no one had any problems.

What it means:

  • or no one has ever done such an operation, because there would be issues
  • or they did it through raw query in the migration

imho

@KieranFYI
Copy link
Contributor Author

The only other method to fix this issue would be to change the compiler to combine compilePrimary and compileDropPrimary, but this would be alot of effort and most likely isn't support across the other schema's.

@KieranFYI
Copy link
Contributor Author

@vanodevium I'm not sure i understand what your problem is here, This is how SQL works, it's not going to cause issues.

@taylorotwell
Copy link
Member

I've seen several mentions of "issues" and "problems". Please, anyone, elaborate on those issues that would be caused by this PR in very practical, real-world terms.

@Ballard-dev
Copy link

I'm having a bit of a hard time understanding the fears around this PR.

You have a migration that declares a primary key.

You later write a migration that declares a new primary key. A table can only have one primary key so the primary key is moved to your new declaration.

That seems... kinda fine? What am I missing?

Checks out

@afonic
Copy link

afonic commented Dec 16, 2023

The error message in @KieranFYI's example sent me here. I resolved my issue by dropping the primary key in one migration and adding a new one in the subsequent migration (different file).

This PR would greatly speed up things in development. The only problem I can foresee is that if a user accidentally declares a new primary key, it would drop the old one, likely breaking existing relationships. However, since migrating on a production environment can generally cause significant issues, I don't thing that it applies here.

@KieranFYI
Copy link
Contributor Author

@afonic dropping a primary key should have no effect on foreign keys, only dropping the column would cause issues. Would you be able to explain yourself a bit more?

@afonic
Copy link

afonic commented Dec 17, 2023

@KieranFYI yeah you're right, I meant dropping the column after removing the primary index. Honestly, I can't see any negatives about this.

@driesvints driesvints changed the title Drop the primary key if it exists when adding a new primary key [10.x] Drop the primary key if it exists when adding a new primary key Dec 18, 2023
@taylorotwell taylorotwell merged commit be24812 into laravel:10.x Dec 18, 2023
24 checks passed
@hackerESQ
Copy link

hackerESQ commented Dec 19, 2023

This is PR is causing a regression in my testing.

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists PRIMARY, add primary key (key, tenant)' at line 1 (Connection: tenant, SQL: alter table settings drop index if exists PRIMARY, add primary key (key, tenant))

I initially create a table that looks like this:

Schema::create('settings', function (Blueprint $table) {
    $table->string('key')->unique()->index();
    $table->text('value')->nullable();
    $table->primary('key');
});

Then update it like this to create a compound key. This used to work as expected:

Schema::table('settings', function (Blueprint $table) {
    $table->string('key')->index()->change();
    $table->string('tenant')->nullable();
    $table->dropPrimary('key');
    $table->dropUnique('settings_key_unique');

    $table->primary(['key', 'tenant']);
    $table->unique(['key', 'tenant']);
});

Which seems to be executed as:

alter table settings drop index if exists PRIMARY, add primary key (key, tenant)

Note the drop and add in the same query.

Before this PR, there was an expectation that you had to explicitly drop the primary key before we could add a new key and these would run as separate queries.

I've narrowed the issue down to v10.38.0 and this PR.

Still testing what's causing MySQL to squawk specifically, but I'm suspecting MySQL doesn't like dropping keys and adding keys in the same query. You can either do one or the other. I think.

Any suggestions are appreciated.

@vanodevium
Copy link

as I said before, this should not be a global change, because it will cause many problems for people

@muhajirinlpu
Copy link

muhajirinlpu commented Dec 20, 2023

I made temporary workaround with custom MysqlGrammar, I drop it here in case anyone need it

<?php

namespace App\Database\Schema\Grammars;

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Fluent;

class MysqlGrammar extends \Illuminate\Database\Schema\Grammars\MySqlGrammar
{
    public function compilePrimary(Blueprint $blueprint, Fluent $command)
    {
        return sprintf('alter table %s add primary key %s(%s)',
            $this->wrapTable($blueprint),
            $command->algorithm ? 'using '.$command->algorithm : '',
            $this->columnize($command->columns)
        );
    }
}

and add into AppServiceProvider.php in boot method

        DB::connection('mysql')->setSchemaGrammar(new MysqlGrammar());

@dnldsht
Copy link

dnldsht commented Dec 20, 2023

@taylorotwell i'm also facing the same issue that @hackerESQ reported. in mysql 8 seems that you can't do
alter table settings drop index if exists PRIMARY

it gives the following syntax error
[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists PRIMARY' at line 1

taylorotwell added a commit that referenced this pull request Dec 20, 2023
@taylorotwell
Copy link
Member

Reverted.

renovate bot added a commit to RadioRoster/backend that referenced this pull request Feb 10, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [laravel/framework](https://laravel.com)
([source](https://togithub.com/laravel/framework)) | `10.33.0` ->
`10.43.0` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/laravel%2fframework/10.43.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/laravel%2fframework/10.43.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/laravel%2fframework/10.33.0/10.43.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/laravel%2fframework/10.33.0/10.43.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>laravel/framework (laravel/framework)</summary>

###
[`v10.43.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10430---2024-01-30)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.42.0...v10.43.0)

- \[10.x] Add storage:unlink command by
[@&#8203;salkovmx](https://togithub.com/salkovmx) in
[laravel/framework#49795
- \[10.x] Unify `\Illuminate\Log\LogManager` method definition comments
with `\Psr\Logger\Interface` by
[@&#8203;eusonlito](https://togithub.com/eusonlito) in
[laravel/framework#49805
- \[10.x] class-name string argument for global scopes by
[@&#8203;emargareten](https://togithub.com/emargareten) in
[laravel/framework#49802
- \[10.x] Add `hasIndex()` and minor Schema enhancements by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49796
- \[10.x] Do not touch `BelongsToMany` relation when using
`withoutTouching` by
[@&#8203;mateusjunges](https://togithub.com/mateusjunges) in
[laravel/framework#49798
- \[10.x] Check properties on mailables are initialized before sharing
with the view by [@&#8203;j3j5](https://togithub.com/j3j5) in
[laravel/framework#49813
- \[10.x] Remove duplicate actions/checkout from queue workflow by
[@&#8203;Jubeki](https://togithub.com/Jubeki) in
[laravel/framework#49828
- \[10.x] Add `insertOrIgnoreUsing` for Eloquent by
[@&#8203;trovster](https://togithub.com/trovster) in
[laravel/framework#49827
- \[10.x] Make `hasIndex()` Order-sensitive by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49840
- \[10.x] Release action by
[@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49838
- \[10.x] Add MariaDb1060Platform by
[@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49848
- \[10.x] Unified Pivot and Model Doc Block `$guarded` by
[@&#8203;eusonlito](https://togithub.com/eusonlito) in
[laravel/framework#49851
- \[10.x] Introducing `beforeStartingTransaction` callback and use it in
`LazilyRefreshDatabase` by
[@&#8203;pascalbaljet](https://togithub.com/pascalbaljet) in
[laravel/framework#49853
- \[10.x] fix password max validation message by
[@&#8203;MrPunyapal](https://togithub.com/MrPunyapal) in
[laravel/framework#49861
- \[10.x] Fix validation message used for max file size by
[@&#8203;mateusjunges](https://togithub.com/mateusjunges) in
[laravel/framework#49879
- Update README.md by
[@&#8203;foremtehan](https://togithub.com/foremtehan) in
[laravel/framework#49878
- \[10.x] Adds
`FormRequest[@&#8203;getRules](https://togithub.com/getRules)()` method
by [@&#8203;cosmastech](https://togithub.com/cosmastech) in
[laravel/framework#49860
- \[10.x] add addGlobalScopes method by
[@&#8203;emargareten](https://togithub.com/emargareten) in
[laravel/framework#49880
- \[10.x] Allow brick/math 0.12 by
[@&#8203;LogicSatinn](https://togithub.com/LogicSatinn) in
[laravel/framework#49883
- \[10.x] Add support for streamed JSON Response by
[@&#8203;pelmered](https://togithub.com/pelmered) in
[laravel/framework#49873
- \[10.x] Using the native fopen exception in LockableFile.php by
[@&#8203;eusonlito](https://togithub.com/eusonlito) in
[laravel/framework#49895
- \[10.x] Fix LazilyRefreshDatabase when testing artisan commands by
[@&#8203;iamgergo](https://togithub.com/iamgergo) in
[laravel/framework#49914
- \[10.x] Fix expressions in with-functions doing aggregates by
[@&#8203;tpetry](https://togithub.com/tpetry) in
[laravel/framework#49912
- \[10.x] Fix redis tag entries never becoming stale if cache ttl is
past time by [@&#8203;jagers](https://togithub.com/jagers) in
[laravel/framework#49864
- \[10.x] Fix - The `Translator` may incorrectly report the locale of a
missing translation key by
[@&#8203;VicGUTT](https://togithub.com/VicGUTT) in
[laravel/framework#49900
- \[10.x] fix Before/After validation rules by
[@&#8203;MrPunyapal](https://togithub.com/MrPunyapal) in
[laravel/framework#49871

###
[`v10.42.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10420---2024-01-23)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.41.0...v10.42.0)

- \[10.x] Switch to hash_equals in `File::hasSameHash()` by
[@&#8203;simonhamp](https://togithub.com/simonhamp) in
[laravel/framework#49721
- \[10.x] fix Rule::unless for callable $condition by
[@&#8203;dbakan](https://togithub.com/dbakan) in
[laravel/framework#49726
- \[10.x] Adds JobQueueing event by
[@&#8203;dmason30](https://togithub.com/dmason30) in
[laravel/framework#49722
- \[10.x] Fix decoding issue in MailLogTransport by
[@&#8203;rojtjo](https://togithub.com/rojtjo) in
[laravel/framework#49727
- \[10.x] Implement "max" validation rule for passwords by
[@&#8203;angelej](https://togithub.com/angelej) in
[laravel/framework#49739
- \[10.x] Add multiple channels/routes to AnonymousNotifiable at once by
[@&#8203;iamgergo](https://togithub.com/iamgergo) in
[laravel/framework#49745
- \[10.x] Sort service providers alphabetically by
[@&#8203;buismaarten](https://togithub.com/buismaarten) in
[laravel/framework#49762
- \[10.x] Global default options for the http factory by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49767
- \[10.x] Only use `Carbon` if accessed from Laravel or also uses
`illuminate/support` by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49772
- \[10.x] Add `Str::unwrap` by
[@&#8203;stevebauman](https://togithub.com/stevebauman) in
[laravel/framework#49779
- \[10.x] Allow Uuid and Ulid in Carbon::createFromId() by
[@&#8203;kylekatarnls](https://togithub.com/kylekatarnls) in
[laravel/framework#49783
- \[10.x] Test Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49785

###
[`v10.41.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10410---2024-01-16)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.40.0...v10.41.0)

- \[10.x] Add a `threshold` parameter to the `Number::spell` helper by
[@&#8203;caendesilva](https://togithub.com/caendesilva) in
[laravel/framework#49610
- Revert "\[10.x] Make ComponentAttributeBag Arrayable" by
[@&#8203;luanfreitasdev](https://togithub.com/luanfreitasdev) in
[laravel/framework#49623
- \[10.x] Fix return value and docblock by
[@&#8203;dwightwatson](https://togithub.com/dwightwatson) in
[laravel/framework#49627
- \[10.x] Add an option to specify the default path to the models
directory for `php artisan model:prune` by
[@&#8203;dbhynds](https://togithub.com/dbhynds) in
[laravel/framework#49617
- \[10.x] Allow job chains to be conditionally dispatched by
[@&#8203;fjarrett](https://togithub.com/fjarrett) in
[laravel/framework#49624
- \[10.x] Add test for existing empty test by
[@&#8203;lioneaglesolutions](https://togithub.com/lioneaglesolutions) in
[laravel/framework#49632
- \[10.x] Add additional context to Mailable assertion messages by
[@&#8203;lioneaglesolutions](https://togithub.com/lioneaglesolutions) in
[laravel/framework#49631
- \[10.x] Allow job batches to be conditionally dispatched by
[@&#8203;fjarrett](https://togithub.com/fjarrett) in
[laravel/framework#49639
- \[10.x] Revert parameter name change by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49659
- \[10.x] Printing Name of The Method that Calls
`ensureIntlExtensionIsInstalled` in `Number` class. by
[@&#8203;devajmeireles](https://togithub.com/devajmeireles) in
[laravel/framework#49660
- \[10.x] Update pagination tailwind.blade.php by
[@&#8203;anasmorahhib](https://togithub.com/anasmorahhib) in
[laravel/framework#49665
- \[10.x] feat: add base argument to Stringable->toInteger() by
[@&#8203;adamczykpiotr](https://togithub.com/adamczykpiotr) in
[laravel/framework#49670
- \[10.x]: Remove unused class ShouldBeUnique when make a job by
[@&#8203;Kenini1805](https://togithub.com/Kenini1805) in
[laravel/framework#49669
- \[10.x] Add tests for Eloquent methods by
[@&#8203;milwad-dev](https://togithub.com/milwad-dev) in
[laravel/framework#49673
- Implement draft workflow by
[@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49683
- \[10.x] Fixing Types, Word and Returns of `Number`class. by
[@&#8203;devajmeireles](https://togithub.com/devajmeireles) in
[laravel/framework#49681
- \[10.x] Test Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49679
- \[10.x] Officially support floats in trans_choice and
Translator::choice by
[@&#8203;philbates35](https://togithub.com/philbates35) in
[laravel/framework#49693
- \[10.x] Use static function by
[@&#8203;michaelnabil230](https://togithub.com/michaelnabil230) in
[laravel/framework#49696
- \[10.x] Revert "\[10.x] Improve numeric comparison for custom casts"
by [@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49702
- \[10.x] Add exit code to queue:clear, and queue:forget commands by
[@&#8203;bytestream](https://togithub.com/bytestream) in
[laravel/framework#49707
- \[10.x] Allow StreamInterface as raw HTTP Client body by
[@&#8203;janolivermr](https://togithub.com/janolivermr) in
[laravel/framework#49705

###
[`v10.40.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10400---2024-01-09)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.39.0...v10.40.0)

- \[10.x] `Model::preventAccessingMissingAttributes()` raises exception
for enums & primitive castable attributes that were not retrieved by
[@&#8203;cosmastech](https://togithub.com/cosmastech) in
[laravel/framework#49480
- \[10.x] Include system versioned tables for MariaDB by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49509
- \[10.x] Fixes the `Arr::dot()` method to properly handle indexes array
by [@&#8203;kayw-geek](https://togithub.com/kayw-geek) in
[laravel/framework#49507
- \[10.x] Expand Gate::allows & Gate::denies signature by
[@&#8203;antonkomarev](https://togithub.com/antonkomarev) in
[laravel/framework#49503
- \[10.x] Improve numeric comparison for custom casts by
[@&#8203;imahmood](https://togithub.com/imahmood) in
[laravel/framework#49504
- \[10.x] Add session except method by
[@&#8203;xurshudyan](https://togithub.com/xurshudyan) in
[laravel/framework#49520
- \[10.x] Add `Number::clamp` by
[@&#8203;jbrooksuk](https://togithub.com/jbrooksuk) in
[laravel/framework#49512
- \[10.x] Fix Schedule test by
[@&#8203;michaelnabil230](https://togithub.com/michaelnabil230) in
[laravel/framework#49538
- \[10.x] Use correct format of date by
[@&#8203;buismaarten](https://togithub.com/buismaarten) in
[laravel/framework#49541
- \[10.x] Clean Arr by
[@&#8203;michaelnabil230](https://togithub.com/michaelnabil230) in
[laravel/framework#49530
- \[10.x] Make ComponentAttributeBag Arrayable by
[@&#8203;iamgergo](https://togithub.com/iamgergo) in
[laravel/framework#49524
- \[10.x] Fix whenAggregated when default is not specified by
[@&#8203;lovePizza](https://togithub.com/lovePizza) in
[laravel/framework#49521
- \[10.x] Update AsArrayObject.php to use ARRAY_AS_PROPS flag by
[@&#8203;pintend](https://togithub.com/pintend) in
[laravel/framework#49534
- \[10.x] Remove invalid `RedisCluster::client()` call by
[@&#8203;tillkruss](https://togithub.com/tillkruss) in
[laravel/framework#49560
- \[10.x] Remove unused code from `PhpRedisConnector` by
[@&#8203;tillkruss](https://togithub.com/tillkruss) in
[laravel/framework#49559
- \[10.x] Flush about command during test runs by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49557
- \[10.x] Fix parentOfParameter method by
[@&#8203;iamgergo](https://togithub.com/iamgergo) in
[laravel/framework#49548
- \[10.x] Make the Schema Builder macroable by
[@&#8203;kevinb1989](https://togithub.com/kevinb1989) in
[laravel/framework#49547
- \[10.x] Remove unused code from tests by
[@&#8203;imahmood](https://togithub.com/imahmood) in
[laravel/framework#49566
- \[10.x] Update Query/Builder.php $columns typehint by
[@&#8203;Grldk](https://togithub.com/Grldk) in
[laravel/framework#49563
- \[10.x] Add assertViewEmpty to TestView by
[@&#8203;dwightwatson](https://togithub.com/dwightwatson) in
[laravel/framework#49558
- \[10.x] Update tailwind.blade.php for dark mode by
[@&#8203;sabinchacko03](https://togithub.com/sabinchacko03) in
[laravel/framework#49515
- \[10.x] Fix deprecation with null value in cache FileStore by
[@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49578
- \[10.x] Allow Vite asset path customization by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49437
- \[10.x] Type hinting of the second parameter of date- and time-related
`where*()` methods of `Illuminate\Database\Query\Builder` by
[@&#8203;lorenzolosa](https://togithub.com/lorenzolosa) in
[laravel/framework#49599
- \[10.x] Fix Stringable::convertCase() return type by
[@&#8203;vaites](https://togithub.com/vaites) in
[laravel/framework#49590
- Allow \Blade::stringable() to be called on native Iterables by
[@&#8203;tsjason](https://togithub.com/tsjason) in
[laravel/framework#49591
- \[10.x] Refactor time handling using `InteractsWithTime` trait method
by [@&#8203;xurshudyan](https://togithub.com/xurshudyan) in
[laravel/framework#49601
- \[10.x] Add `assertCount` test helper by
[@&#8203;xurshudyan](https://togithub.com/xurshudyan) in
[laravel/framework#49609
- \[10.x] Ability to establish connection without using Config
Repository by [@&#8203;deleugpn](https://togithub.com/deleugpn) in
[laravel/framework#49527
- \[10.x] Add APA style title helper by
[@&#8203;hotmeteor](https://togithub.com/hotmeteor) in
[laravel/framework#49572
- \[10.x] Fix usage of alternatives in error output by
[@&#8203;Mrjavaci](https://togithub.com/Mrjavaci) in
[laravel/framework#49614
- \[10.x] Use locks for queue job popping for PlanetScale's
MySQL-compatible Vitess 19 engine by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49561

###
[`v10.39.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10390---2023-12-27)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.38.2...v10.39.0)

- \[9.x] Support for phpredis 6.0.0 by
[@&#8203;MichalHubatka](https://togithub.com/MichalHubatka) in
[laravel/framework#48380
- \[10.x] Dynamic `maxTries` for queued jobs by
[@&#8203;mechelon](https://togithub.com/mechelon) in
[laravel/framework#49473
- \[10.x] Avoid TypeError when using json validation rule when PHP < 8.3
by [@&#8203;Xint0](https://togithub.com/Xint0) in
[laravel/framework#49474
- \[10.x] Fix use statement compilation in Blade templates by
[@&#8203;MrPunyapal](https://togithub.com/MrPunyapal) in
[laravel/framework#49479
- \[10.x] Allow testing prompts validation by
[@&#8203;cerbero90](https://togithub.com/cerbero90) in
[laravel/framework#49447
- \[10.x] Add 'Roundrobin' Symfony mailer transport driver by
[@&#8203;me-shaon](https://togithub.com/me-shaon) in
[laravel/framework#49435

###
[`v10.38.2`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10382---2023-12-22)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.38.1...v10.38.2)

- \[10.x] Add `conflict` for `doctrine/dbal:^4.0` to
`illuminate/database` by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49456
- \[10.x] Simplify Arr::dot by
[@&#8203;bastien-phi](https://togithub.com/bastien-phi) in
[laravel/framework#49461
- \[10.x] Illuminate\Filesystem\join_paths(): Argument
[#&#8203;2](https://togithub.com/laravel/framework/issues/2) must be of
type string, null given by
[@&#8203;tylernathanreed](https://togithub.com/tylernathanreed) in
[laravel/framework#49467
- \[10.x] Allow deprecation logging in tests by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49457
- \[10.x] Fix missing Validation rules not working with nested array by
[@&#8203;aabadawy](https://togithub.com/aabadawy) in
[laravel/framework#49449

###
[`v10.38.1`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10381---2023-12-20)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.38.0...v10.38.1)

- \[10.x] Adds support for parse callbacks from anonymous classes by
[@&#8203;nunomaduro](https://togithub.com/nunomaduro) in
[laravel/framework#49432
- Revert "\[10.x] Drop the primary key if it exists when adding a new
primary key" by
[@&#8203;taylorotwell](https://togithub.com/taylorotwell) in
[laravel/framework#49448
- \[10.x] Fix installing DBAL on a fresh app by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49438
- \[10.x] Add method to create request by
[@&#8203;dododedodonl](https://togithub.com/dododedodonl) in
[laravel/framework#49446
- \[10.x] Move `Illuminate\Foundation\Application::joinPaths()` to
`Illuminate\Filesystem\join_paths()` by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49433

###
[`v10.38.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10380---2023-12-19)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.37.3...v10.38.0)

- \[10.x] Add routeRoute method to test request by
[@&#8203;fragkp](https://togithub.com/fragkp) in
[laravel/framework#49366
- \[10.x] Update import & typo by
[@&#8203;chu121su12](https://togithub.com/chu121su12) in
[laravel/framework#49370
- \[10.x] Show default `false` values in `db:table` command by
[@&#8203;PerryvanderMeer](https://togithub.com/PerryvanderMeer) in
[laravel/framework#49379
- \[10.x] Fix primary key creation for MySQL with
`sql_require_primary_key` enabled by
[@&#8203;mtawil](https://togithub.com/mtawil) in
[laravel/framework#49374
- \[10.x] Add `charset` and `collation` method to `Blueprint` by
[@&#8203;gcazin](https://togithub.com/gcazin) in
[laravel/framework#49396
- Fixes second run of `about` command on Octane by
[@&#8203;josecl](https://togithub.com/josecl) in
[laravel/framework#49387
- \[10.x] Fix bug in ArrayLock getCurrentOwner by
[@&#8203;Joostb](https://togithub.com/Joostb) in
[laravel/framework#49393
- \[10.x] Dynamo Batch Repository - Match Default Horizon Sort by
[@&#8203;evan-burrell](https://togithub.com/evan-burrell) in
[laravel/framework#49391
- \[10.x] Add Blade `[@session](https://togithub.com/session)` Directive
by [@&#8203;jrd-lewis](https://togithub.com/jrd-lewis) in
[laravel/framework#49339
- \[10.x] Improve `Arr::dot` performance by
[@&#8203;bastien-phi](https://togithub.com/bastien-phi) in
[laravel/framework#49386
- \[10.x] Fix assertStatus() parameter order by
[@&#8203;marcovo](https://togithub.com/marcovo) in
[laravel/framework#49404
- \[10.x] Only set `defaultCasters` if not previously set by
[@&#8203;inxilpro](https://togithub.com/inxilpro) in
[laravel/framework#49402
- \[10.x] Fixes parameter type in `ManagesFrequencies` by
[@&#8203;Lucas-Schmukas](https://togithub.com/Lucas-Schmukas) in
[laravel/framework#49399
- \[10.x] Add SQLite support for `whereJsonContains` method by
[@&#8203;danieleambrosino](https://togithub.com/danieleambrosino) in
[laravel/framework#49401
- \[10x.] Use native json_validate in Validation by
[@&#8203;gtjamesa](https://togithub.com/gtjamesa) in
[laravel/framework#49413
- \[10.x] Introducing `isEmpty` and `isNotEmpty` to
`ComponentAttributeBag` by
[@&#8203;devajmeireles](https://togithub.com/devajmeireles) in
[laravel/framework#49408
- \[10.x] Drop the primary key if it exists when adding a new primary
key by [@&#8203;KieranFYI](https://togithub.com/KieranFYI) in
[laravel/framework#49392
- \[10.x] Improve schema builder `getColumns()` method by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49416
- \[10.x] Add `MailMessage` helpers for plain text email notifications
by [@&#8203;onlime](https://togithub.com/onlime) in
[laravel/framework#49407
- \[10.x] Test Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49426
- \[10.x] Add Conditionable to Pipeline by
[@&#8203;shane-zeng](https://togithub.com/shane-zeng) in
[laravel/framework#49429

###
[`v10.37.3`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10373---2023-12-13)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.37.2...v10.37.3)

- Flush middleware callbacks by
[@&#8203;taylorotwell](https://togithub.com/taylorotwell) in
laravel/framework@bb49a72

###
[`v10.37.2`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10372---2023-12-13)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.37.1...v10.37.2)

- Ability to test chained job via closure by
[@&#8203;jasonmccreary](https://togithub.com/jasonmccreary) in
[laravel/framework#49337
- \[10.x] Add `progress` option to `PendingBatch` by
[@&#8203;orkhanahmadov](https://togithub.com/orkhanahmadov) in
[laravel/framework#49273
- \[10.x] Test Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49338
- \[10.x] Avoid using `rescue()` in standalone `illuminate/database`
component. by [@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49355
- \[10.x] Exclude extension types on PostgreSQL when retrieving types by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49358
- \[10.x] Revert "\[10.x] Disconnecting the database connection after
testing" by [@&#8203;driesvints](https://togithub.com/driesvints) in
[laravel/framework#49361

###
[`v10.37.1`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10371---2023-12-12)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.37.0...v10.37.1)

- \[10.x] Disconnecting the database connection after testing by
[@&#8203;KentarouTakeda](https://togithub.com/KentarouTakeda) in
[laravel/framework#49327
- \[10.x] Get user-defined types on PostgreSQL by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49303

###
[`v10.37.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10370---2023-12-12)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.36.0...v10.37.0)

- \[10.x] Add `engine` method to `Blueprint` by
[@&#8203;jbrooksuk](https://togithub.com/jbrooksuk) in
[laravel/framework#49250
- \[10.x] Use translator from validator in `Can` and `Enum` rules by
[@&#8203;fancyweb](https://togithub.com/fancyweb) in
[laravel/framework#49251
- \[10.x] Get indexes of a table by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49204
- \[10.x] Filesystem : can lock file on append of content by
[@&#8203;StephaneBour](https://togithub.com/StephaneBour) in
[laravel/framework#49262
- \[10.x] Test Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49266
- \[10.x] Fixes generating facades documentation shouldn't be affected
by `php-psr` extension by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49268
- \[10.x] Fixes `AboutCommand::format()` docblock by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49274
- \[10.x] `Route::getController()` should return `null` when the
accessing closure based route by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49269
- \[10.x] Add "noActionOnUpdate" method in
Illuminate/Database/Schema/ForeignKeyDefinition by
[@&#8203;hrsa](https://togithub.com/hrsa) in
[laravel/framework#49297
- \[10.x] Fixing number helper for floating 0.0 by
[@&#8203;mr-punyapal](https://togithub.com/mr-punyapal) in
[laravel/framework#49277
- \[10.x] Allow checking if lock succesfully restored by
[@&#8203;Joostb](https://togithub.com/Joostb) in
[laravel/framework#49272
- \[10.x] Enable DynamoDB as a backend for Job Batches by
[@&#8203;khepin](https://togithub.com/khepin) in
[laravel/framework#49169
- \[10.x] Removed deprecated and not used argument by
[@&#8203;Muetze42](https://togithub.com/Muetze42) in
[laravel/framework#49304
- \[10.x] Add Conditionable to Batched and Chained jobs by
[@&#8203;bretto36](https://togithub.com/bretto36) in
[laravel/framework#49310
- \[10.x] Include partitioned tables on PostgreSQL when retrieving
tables by [@&#8203;hafezdivandari](https://togithub.com/hafezdivandari)
in
[laravel/framework#49326
- \[10.x] Allow to pass `Arrayable` or `Stringble` in rules `In` and
`NotIn` by
[@&#8203;michaelnabil230](https://togithub.com/michaelnabil230) in
[laravel/framework#49055
- \[10.x] Display error message if json_encode() fails by
[@&#8203;aimeos](https://togithub.com/aimeos) in
[laravel/framework#48856
- \[10.x] Allow error list per field by
[@&#8203;timacdonald](https://togithub.com/timacdonald) in
[laravel/framework#49309
- \[10.x] Get foreign keys of a table by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49264
- \[10.x] PHPStan Improvements by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49343
- \[10.x] Handle missing translations: more robust handling of callback
return value by [@&#8203;DeanWunder](https://togithub.com/DeanWunder) in
[laravel/framework#49341

###
[`v10.36.0`](https://togithub.com/laravel/framework/compare/v10.35.0...v10.36.0)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.35.0...v10.36.0)

###
[`v10.35.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10350---2023-12-05)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.34.2...v10.35.0)

- \[10.x] Add `Conditionable` trait to `AssertableJson` by
[@&#8203;khalilst](https://togithub.com/khalilst) in
[laravel/framework#49172
- \[10.x] Add `--with-secret` option to Artisan `down` command. by
[@&#8203;jj15asmr](https://togithub.com/jj15asmr) in
[laravel/framework#49171
- \[10.x] Add support for `Number::summarize` by
[@&#8203;jcsoriano](https://togithub.com/jcsoriano) in
[laravel/framework#49197
- \[10.x] Add Blade [@&#8203;use](https://togithub.com/use) directive by
[@&#8203;simonhamp](https://togithub.com/simonhamp) in
[laravel/framework#49179
- \[10.x] Fixes retrying failed jobs causes PHP memory exhaustion errors
when dealing with thousands of failed jobs by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49186
- \[10.x] Add "substituteImplicitBindingsUsing" method to router by
[@&#8203;calebporzio](https://togithub.com/calebporzio) in
[laravel/framework#49200
- \[10.x] Cookies Having Independent Partitioned State (CHIPS) by
[@&#8203;fabricecw](https://togithub.com/fabricecw) in
[laravel/framework#48745
- \[10.x] Update InteractsWithDictionary.php to use base
InvalidArgumentException by [@&#8203;Grldk](https://togithub.com/Grldk)
in
[laravel/framework#49209
- \[10.x] Fix docblock for wasRecentlyCreated by
[@&#8203;stancl](https://togithub.com/stancl) in
[laravel/framework#49208
- \[10.x] Fix loss of attributes after calling child component by
[@&#8203;rojtjo](https://togithub.com/rojtjo) in
[laravel/framework#49216
- \[10.x] Fix typo in PHPDoc comment by
[@&#8203;caendesilva](https://togithub.com/caendesilva) in
[laravel/framework#49234
- \[10.x] Determine if the given view exists. by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49231

###
[`v10.34.2`](https://togithub.com/laravel/framework/compare/v10.34.1...v10.34.2)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.34.1...v10.34.2)

###
[`v10.34.1`](https://togithub.com/laravel/framework/compare/v10.34.0...v10.34.1)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.34.0...v10.34.1)

###
[`v10.34.0`](https://togithub.com/laravel/framework/blob/HEAD/CHANGELOG.md#v10340---2023-11-28)

[Compare
Source](https://togithub.com/laravel/framework/compare/v10.33.0...v10.34.0)

- \[10.x] Fix `hex_color` validation rule by
[@&#8203;apih](https://togithub.com/apih) in
[laravel/framework#49070
- \[10.x] Prevent passing null to base64\_decode in Encrypter by
[@&#8203;robtesch](https://togithub.com/robtesch) in
[laravel/framework#49071
- \[10.x] Alias Number class by
[@&#8203;ziadoz](https://togithub.com/ziadoz) in
[laravel/framework#49073
- \[10.x] Added File Validation `extensions` by
[@&#8203;eusonlito](https://togithub.com/eusonlito) in
[laravel/framework#49082
- \[10.x] Add [@&#8203;throws](https://togithub.com/throws) in
doc-blocks by
[@&#8203;imanghafoori1](https://togithub.com/imanghafoori1) in
[laravel/framework#49091
- \[10.x] Update docblocks for consistency by
[@&#8203;dwightwatson](https://togithub.com/dwightwatson) in
[laravel/framework#49092
- \[10.x] Throw exception when trying to initiate `Collection` using
`WeakMap` by [@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49095
- \[10.x] Only stage committed transactions by
[@&#8203;hansnn](https://togithub.com/hansnn) in
[laravel/framework#49093
- Better transaction manager object design by
[@&#8203;taylorotwell](https://togithub.com/taylorotwell) in
[laravel/framework#49103
- \[10.x] use php 8.3 `mb_str_pad()` for `Str::pad*` by
[@&#8203;amacado](https://togithub.com/amacado) in
[laravel/framework#49108
- \[10.x] Add Conditionable to TestResponse by
[@&#8203;nshiro](https://togithub.com/nshiro) in
[laravel/framework#49112
- \[10.x] Allow multiple types in Collection's `ensure` method by
[@&#8203;ash-jc-allen](https://togithub.com/ash-jc-allen) in
[laravel/framework#49127
- \[10.x] Fix middleware "SetCacheHeaders" with download responses by
[@&#8203;clementbirkle](https://togithub.com/clementbirkle) in
[laravel/framework#49138
- \[10.x]\[Cache] Fix handling of `false` values in apc by
[@&#8203;simivar](https://togithub.com/simivar) in
[laravel/framework#49145
- \[10.x] Reset numeric rules after each attribute's validation by
[@&#8203;apih](https://togithub.com/apih) in
[laravel/framework#49142
- \[10.x] Extract dirty getter for `performUpdate` by
[@&#8203;taka-oyama](https://togithub.com/taka-oyama) in
[laravel/framework#49141
- \[10.x] `ensure`: Resolve `$itemType` outside the closure by
[@&#8203;lucasmichot](https://togithub.com/lucasmichot) in
[laravel/framework#49137
- Allow "missing" method to be used on route groups by
[@&#8203;redelschaap](https://togithub.com/redelschaap) in
[laravel/framework#49144
- \[10.x] Get tables and views info by
[@&#8203;hafezdivandari](https://togithub.com/hafezdivandari) in
[laravel/framework#49020
- \[10.x] Fix `MorphTo::associate()` PHPDoc parameter by
[@&#8203;devfrey](https://togithub.com/devfrey) in
[laravel/framework#49162
- \[10.x] Make test error messages more multi-byte readable by
[@&#8203;nshiro](https://togithub.com/nshiro) in
[laravel/framework#49160
- \[10.x] Generate a unique hash for anonymous components by
[@&#8203;billyonecan](https://togithub.com/billyonecan) in
[laravel/framework#49156
- \[10.x] Improves output when using `php artisan about --json` by
[@&#8203;crynobone](https://togithub.com/crynobone) in
[laravel/framework#49154
- \[10.x] Make fake instance inherit from `Vite` when using
`withoutVite()` by
[@&#8203;orkhanahmadov](https://togithub.com/orkhanahmadov) in
[laravel/framework#49150

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/RadioRoster/backend).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuMTUzLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

10 participants