• Время чтения ~2 мин
  • 11.02.2024

Команда Laravel выпустила версию 10.43 с поддержкой потоковых ответов JSON, передачей имени класса для регистрации глобальной области видимости Eloquent, новым insertOrIgnoreUsing методом Eloquent и многим другим.

Этот релиз был отмечен 30 января, но в него добавлено несколько отличных функций, которые мы хотели бы выделить. Вот что нового в последнем выпуске Laravel 10:

Добавлена поддержка потоковых ответов JSONПитер Элмеред

внес свой вклад в поддержку того, что было добавлено в StreamedJsonResponse Symphony 6.3. Преимущество заключается в меньшем использовании памяти для больших объемов данных.

Вот пример того, как вы можете использовать его, из описания запроса на вытягивание:Вместе с streamJson методом есть новый помощник по тестированию для утверждения потокового содержимого JSON:

namespace App\Http\Controllers;

use Generator;
use App\Models\User;

class ExampleController extends Controller
{
    public function index()
    {
        return response()->streamJson([
            'users' => $this->yieldUsers(),
        ]);
    }
    protected function yieldUsers(): Generator
    {
        foreach (User::query()->cursor() as $user) {
            yield $user;
        }
    }
}

$response->assertStreamedJsonContent([
    'data' => [
        ['id' => 1],
        ['id' => 2],
        ['id' => 3],
    ],
]);

Вы можете узнать больше об этой функции Symphony из документации по компоненту HttpFoundation для потоковой передачи ответа JSON.

Новый метод Eloquent insertOrIgnoreUsing Тревор

Моррис (Trevor Morris) внес свой вклад в метод, который «позволяет массовой вставке с использованием sub-select быть успешной в случае конфликтов ключей в коннекторах, поддерживающих функциональность игнорирования»:Новый метод схемы hasIndex()Хафез Дивандари (Hafez Divandari) внес insertOrIgnoreUsing свой вклад Schema::hasIndex() в метод

$result = $builder->from('table1')->insertOrIgnoreUsing(
    ['foo'],
    function (Builder $query) {
        $query->select(['bar'])->from('table2')->where('foreign_id', '=', 5);
    }
);
// MySQL:
// insert ignore into `table1` (`foo`) select `bar` from `table2` where `foreign_id` = ?'
// PostgreSQL:
// insert into "table1" ("foo") select "bar" from "table2" where "foreign_id" = ? on conflict do nothing

наряду с несколькими другими методами, которые можно использовать следующим образом:

Schema::hasIndex('users', 'my_index_name');
Schema::hasIndex('users', ['email']);
Schema::hasIndex('users', ['email'], 'unique');
Schema::hasIndex('users', ['id'], 'primary');
Schema::hasIndex('users', ['name', 'title'], 'fulltext');

Schema::getTableListing(); // string[]
Schema::getIndexListing('users'); // string[]

Использование имен классов при добавлении глобальных областей видимости

Элиэзер Маргаретен добавил возможность передавать имя класса области видимости при добавлении глобальной области видимости в модель:В дополнение к этому обновлению, Элиэзер внес метод, который позволяет регистрировать сразу несколько глобальных областей видимости:Новая storage:unlink команда ArtisanМихаил Сальков

/**
 * The "booted" method of the model.
 */
protected static function booted(): void
{
    static::addGlobalScope(AncientScope::class);
}

внес addGlobalScopes() свой вклад в новую команду Artisan, которая удаляет все символические ссылки:

/**
 * The "booted" method of the model.
 */
protected static function booted(): void
{
    static::addGlobalScopes([FirstScope::class, SecondScope::class]);
}

Примечания

php artisan storage:unlink

к выпуску Вы можете увидеть полный список новых функций и обновлений ниже,

а также различия между версиями 10.42.0 и 10.43.0 на GitHub. Следующие примечания к выпуску взяты непосредственно из журнала изменений:

v10.43.0

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297