• Час читання ~2 хв
  • 11.02.2024

Команда Laravel випустила v10.43 з підтримкою потокових відповідей JSON, передачею імені класу для реєстрації глобальної області видимості, новим insertOrIgnoreUsing методом Eloquent та іншим.

Цей випуск був позначений 30 січня, але додано кілька чудових функцій, які ми хотіли виділити. Ось що нового в останньому випуску Laravel 10:

Додано підтримку потокових відповідей JSON Пітер

Елмеред вніс свій внесок у StreamedJsonResponse підтримку того, що було додано в Symphony 6.3. Перевага полягає в меншому використанні пам'яті для великих навантажень даних.

Ось приклад того, як ви можете використовувати його, з опису запиту на злиття:Поряд з методом є новий помічник тестування для затвердження потокового вмісту 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 з streamJson їхньої документації компонента HttpFoundation для потокової відповіді JSON.

Новий красномовний insertOrIgnoreUsing методТревор Морріс (Trevor Morris) представив insertOrIgnoreUsing метод, який «дозволяє масово вставляти за допомогою sub-select, щоб бути успішним, якщо є ключові конфлікти, у з'єднувачах, які підтримують функцію «ігнорувати»:

Новий метод схеми hasIndex()Хафез Дівандарі надав 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[]

Використовуйте імена класів при додаванні глобальних областейвидимості

Еліезер Маргаретен внесли можливість передавати ім'я класу області видимості при додаванні глобальної області видимості до моделі:На додаток до цього оновлення, Eliezer вніс метод, який дозволяє реєструвати кілька глобальних областей видимості одночасно:

/**
 * 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