Команда 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
- [10.x] Додано команду storage:unlink від @salkovmx у https://github.com/laravel/framework/pull/49795
- [10.x] Уніфікувати
\Illuminate\Log\LogManager
коментарі визначення методу за допомогою\Psr\Logger\Interface
by @eusonlito у https://github.com/laravel/framework/pull/49805 - [10.x] рядковий аргумент class-name для глобальних областей видимості за @emargareten у https://github.com/laravel/framework/pull/49802
- [10.x] Додано
hasIndex()
та незначні покращення схеми за допомогою @hafezdivandari у https://github.com/laravel/framework/pull/49796 - [10.x] Не торкайтеся
BelongsToMany
профілів під час використанняwithoutTouching
@mateusjunges в https://github.com/laravel/framework/pull/49798 - [10.x] Перевірте властивості на поштових об'єктах ініціалізуються перед тим, як поділитися з представленням даних за допомогою @j3j5 у https://github.com/laravel/framework/pull/49813
- [10.x] Видаліть дублікати дій/оформлення замовлення з робочого процесу черги за @Jubeki у https://github.com/laravel/framework/pull/49828
- [10.x] Додати
insertOrIgnoreUsing
для Eloquent від @trovster у https://github.com/laravel/framework/pull/49827 - [10.x] Зробіть
hasIndex()
Order-sensitive за допомогою @hafezdivandari у https://github.com/laravel/framework/pull/49840 - [10.x] Реліз дії від @driesvints в https://github.com/laravel/framework/pull/49838
- [10.x] Додано MariaDb1060Platform за @driesvints у https://github.com/laravel/framework/pull/49848
- [10.x] Уніфікований зведений і модельний документальний блок
$guarded
за @eusonlito у https://github.com/laravel/framework/pull/49851 - [10.x] Представляємо
beforeStartingTransaction
зворотний виклик і використовуємо його в @pascalbaljet вLazilyRefreshDatabase
https://github.com/laravel/framework/pull/49853 - [10.x] Виправлено повідомлення про максимальне підтвердження пароля за допомогою @MrPunyapal у https://github.com/laravel/framework/pull/49861
- [10.x] Виправлено повідомлення про перевірку, яке використовувалося для максимального розміру файла на @mateusjunges у https://github.com/laravel/framework/pull/49879
- Оновлення README.md за @foremtehan у https://github.com/laravel/framework/pull/49878
- [10.x] Додає
FormRequest[@getRules](https://github.com/getRules)()
метод за @cosmastech у https://github.com/laravel/framework/pull/49860 - [10.x] додано метод addGlobalScopes за @emargareten у https://github.com/laravel/framework/pull/49880
- [10.x] Дозволити цеглу/математику 0,12 на @LogicSatinn у https://github.com/laravel/framework/pull/49883
- [10.x] Додано підтримку потокової відповіді JSON від @pelmered у https://github.com/laravel/framework/pull/49873
- [10.x] Використання вбудованого винятку fopen у LockableFile.php by @eusonlito у https://github.com/laravel/framework/pull/49895
- [10.x] Виправлено LazilyRefreshDatabase при тестуванні команд artisan за @iamgergo у https://github.com/laravel/framework/pull/49914
- [10.x] Виправлено вирази у with-функціях, які виконують агрегати за @tpetry у https://github.com/laravel/framework/pull/49912
- [10.x] Виправлено помилку, пов'язану із тим, що записи міток redis ніколи не ставали застарілими, якщо кеш ttl минув на @jagers у https://github.com/laravel/framework/pull/49864
- [10.x] Виправлення — може
Translator
неправильно повідомляти про локаль відсутнього ключа перекладу @VicGUTT у https://github.com/laravel/framework/pull/49900 - [10.x] виправлено правила валідації «До/Після» за допомогою @MrPunyapal у https://github.com/laravel/framework/pull/49871