- Perform stable sort in
Collection::sortBy()
(2nd attempt) (#21270) - Return empty string if database session key is expired (#21277)
- Fixed setting
Model::UPDATED_AT
inSoftDeletes
(#21286) - Apply custom pivot model attribute casting on arrays (#21275)
- Fixed issue with routes sorting (#21261)
- Fix
CacheClearCommand
binding (#21256)
- Reverted stable sort support in
Collection::sortBy()
(#21255)
- Added
:input
placeholder in validation error messages (#21175) - Added
@includeFirst
Blade directive (#21172) - Allow setting column styles for tables in Artisan commands (#21169)
- Added
ValidatesRequests::extractInputFromRules()
method (#21192) - Added
-m
shortcut tomake:factory
(#21219) - Added ability to set a fallback (catch-all) route (#21234)
- Support
null
onModel::UPDATED_AT
(#21178) - Render views from config while building error views (#21145)
- Use multibyte functions in some
Str
methods (#21207) - Perform stable sort in
Collection::sortBy()
(#21214)
- Ignore
SELECT
bindings inprepareBindingsForUpdate()
(#21173) - Fixed
remember
check inAuthenticatesUsers::attemptLogin()
(#21221) - Added "hardware" as an uncountable word (#21236)
- Added
Blueprint::spatialIndex()
method (#21070) - Added support for SQL Server's
TransactionIsolation
DSN key (#21069) - Added
ManagesFrequencies::everyFifteenMinutes()
method (#21092) - Added
Mailable::hasReplyTo()
method (#21093) - Added
MailMessage::template()
method (#21154) - Added support for Rackspace to
Storage::url()
(#21157) - Added support to use sub-queries as a where condition on a join clause (#21008)
- Return
null
fromRoute::getAction()
if$key
is not found (#21083) - Restore non-static signature of
Router::prepareResponse()
(#21114, e1a1265) - Removed
Model
type hint fromModel::isNot()
(4d8f0a1) - Prefer
Jsonable
overArrayable
inJsonResponse::setData()
(#21136) - Reset
cc
andbcc
inMailer::setGlobalTo()
(#21137) - Avoid trace
args
in JSON exceptions (#21149)
- Fixed
@json
directive parameter logic (2a25ee7) - Fixed a problem with
withoutExceptionHandling()
when called more than once (#21086) - Added a
compileForeign()
method toPostgresGrammar
(#21038) - Reset the index after a
MissingValue
while resolving resource (#21127) - Fixed
getQualifiedParentKey()
onBelongsToMany
relationships (#21128) - Fixed parameters on
Route::view()
when usingwhere()
(#21113) - Show real directory name in the exception message thrown by
PackageManifest
(#21099) - Fixed undefined offset error when refreshing a database collection (#21159)
- Added
$action
parameter toRoute::getAction()
for simpler access (#20975) - Added
@json
blade directive (#21004) - Added
rescue()
helper (#21010, 74ecb34, c4d1c47) - Support commas in
In
andNotIn
parameters (#21012, 3c3c5e4) - Added
RedisManager::connections()
method (#21014, 1deaaa9) - Added exception class to JSON exceptions (#21043)
- Added
Gate::policies()
method (#21036) - Added geo spatial blueprint methods (#21056)
- Fixed migrations not being run in batch order (#20986)
- Flush application resources on teardown (#21022)
- Catch errors while building exception context (#21047)
- Return
$this
fromValidator::setCustomMessages()
(#21046)
- Make
Request::validate()
return the value of parent key (#20974) - Fixed date comparison validators failing when a format is specified (#20940)
- Fixed login throttling failing when
decayMinutes
is more than1
(#20997) - Only use reflection on classes in
Kernel::load()
(#20998) - Specify lower case
column_name
inMySqlGrammar::compileColumnListing()
(#21037) - Fixed eager loading problem with
BelongsToMany
(#21044)
- Remove unnecessary
lcfirst()
call inauthorizeResource()
(#21017) - Removed
$listensFor
from listener stubs (#21039)
- Added
mov
extension andMimeType::search()
method (#20917) - Added support for
dont-discover
in packages (#20921, 4a6f1f2) - Added
retrieved
model event (#20852, 84291a6) - Added
HasOneOrMany::setForeignAttributesForCreate()
method (#20871) - Made
Route
macroable (#20970)
- Load deferred providers before commands (366c50e)
- Don't pass cache instance to Schedule anymore (#20916, #20933)
- Simplified
mix
require (#20929) - Return
null
if resource attribute contains relation with a null value (#20969)
- Prevent
ErrorException
inCollection::operatorForWhere()
method (#20913) - Create default console input/output in
Application::run()
(#20922, 7647399) - Ignore abstract classes in
Kernel::load()
(#20931) - Fixed
listener-queued-duck.stub
filename (#20937) - Fixed faking notification sending while using AnonymousNotifiable (#20965)
- Fixed
eachSpread()
andmapSpread()
with nested collections (#20962) - Fixed generating names for classes beginning with slash (#20961)
- Added getter methods on
MimeType
(#20826)
- Moved console commands auto discovery to
Kernel::bootstrap()
(#20863) - Use classes instead of helper functions (#20879, #20880)
- Changed
Resource::$collects
visibility topublic
(#20885)
- Fixed
choice()
on non-tty terminals (#20840) - Fixed Macroable calls on
Optional
(#20845, #20898) - Fixed
dropAllTables()
when usingPDO::FETCH_ASSOC
mode (#20859) - Pass model name to
ModelNotFoundException::setModel()
(#20896, 891f90e) - Fixed
Basic
authentication (#20905) - Fixed
DelegatesToResource::offsetExists()
(#20887)
- Removed redundant methods from
MorphOneOrMany
(#20837)
⚠️ Require PHP 7+ (06907a0, 39809ce)⚠️ Removed deprecatedServiceProvider::compile()
method (10da428)⚠️ Removed deprecatedStr::quickRandom()
method (2ef257a)- Removed
build
scripts (7c16b15) - Upgraded to Symfony 3.3 components (4db7031, 67a5367)
- Throw
RuntimeException
when app key is missing (#19145, 8adbaa7)
- Added interactive prompt to
vendor:publish
(#18230) - Added
migrate:fresh
command (f6511d4, #20090) - Added
make:factory
command and added--factory
tomake:model
(a6ffd8b, #19985) - Added
make:rule
command (76853fd) ⚠️ AddedrunningInConsole()
methodApplication
contract (#18658)- Support default value(s) on command arguments (#18572)
- Improved CLI detection for phpdbg (#18781)
⚠️ Always return array fromRetryCommand::getJobIds()
(#19232)- Support passing absolute paths to
make::listener
(#19660) ⚠️ Usehandle()
method instead offire()
(#19827, #19839, #20024)- Try to guess the
--create
option when generation migrations (#20032) - Generate
make:policy
with real user model namespace (#20047) - Added
Kernel::load()
to auto register a directory of commands (2e7ddca, d607b9c) ⚠️ Removedarray
type hint fromCommand::table()
(#20120)- Support loading multiple paths in
Kernel::load()
(#20251, #20595) - Added
CommandStarting
andCommandFinished
events (#20298) - Show error message if a reverted migration is not found (#20499, a895b1e)
- Set correct namespace in model factories when using the
app:name
command (#20766) ⚠️ Switched the-f
shortcut from--force
to--factory
onmake:model
command (#20800)
- Added frontend preset commands (463b769, too many follow-up commits)
⚠️ Support default user providers and pass user provider toRequestGuard
(#18856)- Made the user provider parameter on
RequestGuard
optional (d7f0b26) - Use
setRememberToken()
inResetsPasswords
(#19189) - Added a
PasswordReset
event (#19188) ⚠️ Support multiword models inauthorizeResource()
(#19821)- Added support for no user provider in
CreatesUserProviders
(4feb847)
- Support multiple values in
Gate::has()
(#18758) ⚠️ Prevent policies from being too greedy (#19120)⚠️ Addedabilities()
method toGate
contract (#19173)⚠️ Implementiterable
onGate::check()
andGate::any()
(#20084)
- Added
Blade::if()
method (71dfe0f, 2905364, #20025) - Added
@switch
,@case
,@break
and@default
directives (#19758) ⚠️ Prevent Blade from parsing PHP code inside@php
blocks (#20065)
⚠️ UseAccessDeniedHttpException
instead ifHttpException
(#19611)⚠️ Upgraded to Pusher SDK v3 (#20016)
⚠️ PSR-16 compliance (#20194)- Don't encrypt database cache values (f0c72ec)
- Added support cache locks (4e6b2e4, 045e6f2, #19669)
- Accept
DatetimeInterface
andDateInterval
in cache repository (#20034) - Added
getStore()
method to cacheRepository
interface (#20338) ⚠️ MadeRateLimiter
less aggressive (#20759)
- Support multiple values in
Collection::has()
(#18758) - Added
Collection::mapInto()
method (2642ac7) - Added
Collection::dd()
method (f5fafad) - Added
Collection::dump()
method (#19755) - Added
wrap()
andunwrap()
methods (#20055, #20068) - Added keys to
partition()
,eachSpread()
andmapSpread
callback (#20783, #20723)
- Added
Config::getMany()
method (#19770)
⚠️ AddeddropAllTables()
to schema builder (#18484, d910bc8, #19644, #19645, #20239, #20536)- Added precision to
dateTime
andtimestamp
column types (#18847, f85f6db, #18962, #20464) - Pass page number to
chunk()
callback (#19316) - Improve memory usage in
chunk()
andchunkById()
(#19345, #19369, #19368) - Fixed
compileColumnListing()
when using PostgreSQL with multiple schemas (#19553) - Allow the seeder to call multiple commands at once (#19912)
- Added pgpool message to
DetectsLostConnections
(#20418) - Prevent race conditions on replicated databases (#20445, 0ec1522, 3824a36)
⚠️ Support sticky database connections (#20746)
- Added API resources (#20710, too many follow-up commits)
⚠️ Indicate soft deleted models as existing (#17613)⚠️ Added$localKey
parameter toHasRelationships::belongsToMany()
andBelongsToMany
(#17903, 7c7c3bc)⚠️ Added$parentKey
parameter tobelongsToMany()
,BelongsToMany
andMorphToMany
(#17915, #18380)⚠️ Renamed$parent
property to$pivotParent
inPivot
class (#17933, #18150)⚠️ Don't add_count
suffix to column name when usingwithCount()
with an alias (#17871)⚠️ Renamed$events
to$dispatchesEvents
(#17961, b6472bf, 3dbe12f)⚠️ Only return query builder when the result is null forcallScope()
(#18845)- Allow setting a factory's attribute to a factory instance (#18879)
- Support
null
comparison inModel::is()
(#18511) - Added
getDirty()
checks for date and castable attributes (#18400, e180e20) - Show method name in invalid relationship
LogicException
(#18749) - Add support for additional values in
firstOrCreate()
andfirstOrNew()
(#18878) - Added a second local key to
HasManyThrough
(#19114) - Respect casts declaration on custom pivot models (#19335)
- Support creating relations without attributes (#19506)
- Added
Model::only()
method (#19459) ⚠️ Support model serialization on non default connection (#19521, dd45f70)⚠️ Support updating nullable dates (#19672)⚠️ Make pivot model instantiable (#20179)- Simplified
BelongsToMany::allRelatedIds()
logic (#20189) - Added
Relation::get()
method (#20052) - Added
hasChanges()
,wasChanged()
,getChanges()
andsyncChanges()
(#20129, #20130) - Better exception message when calling non existing methods on models (#20196, 91c1f03)
- Added support for connections on model factories (#20191)
- Check for real primary key in
Pivot
methods (8d82618) - Default
$attributes
onBelongsToMany::create()
to empty array (973bff4) - Add ability to set a custom pivot accessor (#20411)
⚠️ CallsetConnection()
inModel::save()
(#20466)⚠️ Touch parent timestamp only if the model is dirty (#20489)- Added
Model::loadMissing()
method (#20630, 4166c12) - Added
Model::whereKeyNot()
method (#20817)
- Use
openssl_cipher_iv_length()
inEncrypter
(#18684) - Added
Encrypter::generateKey()
method (6623996) - Use
json_last_error()
inEncrypter
(#20099)
- Added default 404, 419 and 500 error pages (#18483, 4d8c2c1)
⚠️ Always show custom 500 error page for all exception types when not in debug mode (#18481, 3cb7b0f)⚠️ Show 419 error page onTokenMismatchException
(#18728)- Support
render()
method on exceptions (ed51160, c8a9413) - Support
report()
method on exceptions (e77f6f7) ⚠️ Send exceptions as JSON in debug mode if the request wants JSON (5225389, #18732, 4fe6091, 9ab58fd, #19333)⚠️ Moved exceptions from$dontReport
into$internalDontReport
(841b36c)- Added
Handler::context()
method, that by default adds some default context to logs (23b7d6b) ⚠️ Don't set formatter onErrorLogHandler
(a044f17)- Use whoops for errors (b697272, f6b67d4, #19471, #20412)
- Changed how exceptions are logged (#19698, f1971c2)
⚠️ ReturnHttpException
with code413
fromPostTooLargeException
(#19773)- Support custom logger channel names (#20133)
⚠️ Unify exception formatting (#20173, #20067, #20167, too many follow-up commits, sorry)- Added default
Handler::unauthenticated()
method (11b0de0)
⚠️ Removed calling queue method on handlers (0360cb1, ec96979, d9be4bf)- Allow faking only specific events (#19429)
- Support self-registering event listeners (#19917, 4d557c5, #19962, 5ed4f50)
- Added ability to determine if queued handler should be pushed to queue (#19957, efe616c)
⚠️ MadeStorage::files()
work likeStorage::allFiles()
(#18874, 7073457)⚠️ Fixed compatibility betweenFilesystemAdapter
and theFilesystem
interface (#19389)
- Added
report()
helper (2b67619) - Added
throw_if()
andthrow_unless()
helpers (18bb4df, #19166, #19255) - Added
dispatch_now()
helper (#18668, 61f2e7b) - Added
$language
parameter tostr_slug()
helper (#19011) - Added
str_before()
helper (#19940, #20049) - Added
now()
andtoday()
helpers (3c888b6, #20716) - Added
blank()
,filled()
,optional()
andtransform()
helpers (06de9b2, 31308e3) - Handle lower case words better in as
Str::snake()
(#18764) - Removed usages of the
with()
helper (#17888) - Support multiple patterns in
Str::is()
(#20108) - Speed up
Arr::get()
calls without dot notations (#20139) - Use
report()
helper inmix()
(#20603, bf0cb82)
⚠️ MovedLoaderInterface
to contracts (#20460)⚠️ Support loading JSON translation for packages (#20599, 573f85c)- Support language specific characters in
Str
(#18974, #19694)
- Allow mailables to be rendered directly to views (d9a6dfa)
- Allow for per-mailable theme configuration (b2c35ca)
⚠️ Removed$data
and$callback
parameters fromMailer
andMailQueue
⚠️ MadeMarkdown
a dependency ofMailChannel
(#19349)⚠️ Upgraded to SwiftMailer 6 (#19356)⚠️ Addedto()
andbcc()
toMailer
contract (#19955)
- Added methods for Slack's
thumb_url
andunfurl_*
options (#19150, #19200) - Support sending notifications via
AnonymousNotifiable
(#19998, ba82579) - Accept other types on
SlackAttachment::timestamp()
(#20671)
- Added support for chainable jobs (81bcb03, too many follow-up commits, sorry)
⚠️ Removed redundant$queue
parameter fromQueue::createPayload()
(#17948)- Made all
getQueue()
methodspublic
(#18501) - Pass connection and queue to
Looping
event (#19081) ⚠️ Clone Job specific properties (#19123)⚠️ Declare missing abstractJob::getRawBody()
method (#19677)⚠️ Fail (or optionally silently delete) job when model is missing during deserialization (44b1f85, bceded6)- Added
CallQueuedListener::__clone()
method (#20022) - Accept
DatetimeInterface
andDateInterval
in queue (#20102, 92e2aff) ⚠️ Usedispatch()
instead offire()
(#20446)- Removed
reserved_at
index from jobs table stub (#20702) - Support job expiration (#20776, 1592b9b)
⚠️ Several improvements onPhpRedisConnection
(#20269, #20316)⚠️ RemovedPhpRedisConnection::proxyToEval()
method (#17360)- Added Redis limiters (#20597, ceb260e, #20761, aba76bf, 3684f0c, #20772)
⚠️ MadeRequest::has()
work likeCollection::has()
(#18715)- Added
Request::filled()
(#18715) ⚠️ MadeRequest::only()
work likeCollection::only()
(#18695)- Aliased
Request::exists()
toRequest::has()
(183bf16) - Allow passing keys to
Request::all()
to behave like oldRequest::only()
(#18754) ⚠️ RemovedRequest::intersect()
(#18695)- Return request data from
ValidatesRequests
calls (#19033) - Added a
validate()
macro ontoRequest
(#19063) - Added
FormRequest::validated()
method (#19112) ⚠️ Maderequest()
helper andRequest::__get()
consistent (a6ff272)- Made
Request::routeIs()
work likeRequest()::fullUrlIs()
(#19267, bfc5321, #19334) - Added
Request::hasAny()
method (#19367) ⚠️ Throw validation exception fromValidatesRequests
without formatting response (#19929, 6d33675, ec88362, c264807)- Added
Request::post()
method (#20238) - Added
Request::keys()
method (#20611)
- Support fluent resource options (#18767, bb02fb2)
- Support multiple values in
Router::has()
(#18758) ⚠️ Bind empty optional route parameter tonull
instead of empty model instance (#17521)- Accept patterns on
Route::named()
,Router::is()
andRouter::currentRouteNamed()
(#19267, bfc5321) - Added
domain()
setter/getter toRoute
(#19245, bba04a1) - Added
Route::redirect()
method (#19794) - Added
Route::view()
method (#19835) ⚠️ ImprovedThrottleRequests
middleware (#19807, #19860)⚠️ Return proper 304 responses (#19867)- Return the resource from
Router::apiResource()
(#20029) ⚠️ Moved route model binding resolution logic to model (#20521, 370e626, #20542, #20618, d911fa8)- Accept string on
parameters()
andnames()
methods (#20531, #20529) - Handle
HEAD
requests inRouter::view()
(#20672) - Added
ThrottleRequestsWithRedis
middleware (#20761, 0a10f9a)
⚠️ EnsureArrayable
andJsonable
return aJsonResponse
(#17875)⚠️ EnsureArrayable
objects are also morphed byResponse
(#17868)- Added
SameSite
support toCookieJar
(#18040, #18059, e69d722) - Accept
HeaderBag
inResponseTrait::withHeaders()
(#18161) ⚠️ Reset response content-type inResponse::setContent()
(#18314, #20313)⚠️ Always retrieve the real original content (#20002)
⚠️ RefactoredContainer
(#19201)⚠️ Made container PSR-11 compliant (#19822, a6068b0, 66325c2)- Return the bound instance from
Container::instance()
(#19442) ⚠️ Use instance instead of deferred service provider (#20714)
⚠️ Default value totrue
inStore::flash()
(#18136)⚠️ Store the user password hash when logging in (#19843)⚠️ ThrowUnauthorizedHttpException
fromfailedBasicResponse
(#20673)
- Autoload package providers (#19420, a5a0f3e, 2954091, #19455, #19561, #19646)
- Added support for
Responsable
objects (c0c89fd, 1229b7f, #19614, ef0e37d) - Made
Carbon
macroable and serializeable (#19771, #20568, 6a18209) - Support registering macros using classes (#19782, 353adbd)
⚠️ MovedInteractsWithTime
toIlluminate\Support
(#20119, #20206)- Support callable/invokable objects in
Pipeline
(#18264) ⚠️ Prevent access to protected properties using array access onModel
andFluent
(#18403)⚠️ ExtendMessageBag
interface fromArrayable
and addgetMessages()
method (#19768, #20334)- Handle
Arrayable
items inMessageBag
(6f1f4d8) - Added
isNotEmpty()
method to message bags and paginators (#19944) - Return the collection iterator from
AbstractPaginator::getIterator()
(#20098) ⚠️ Fixed minimum value of paginatorlast_page
field (#20335)
- Fire before callbacks on closure-based scheduling events (#18861)
- Run after-callbacks even if a callback event failed (#19573)
⚠️ Fixed bug inquarterly()
method (#19600)⚠️ Support passing boolean intowhen()
andskip()
(1d1a96e)
⚠️ Switched to PHPUnit 6 (#17755, #17864)⚠️ Renamed authentication assertion methods (#17924, 494a177)⚠️ Unify database testing traits intoRefreshDatabase
trait (79c6f67, 0322e32, #20308)⚠️ Changed Blade tests namespace toIlluminate\Tests\View\Blade
(#19675)- Added integration tests for the framework itself (182027d, #18438, #18780, #19001, #20073)
- Allow disabling of specific middleware (#18673)
- Added
withoutExceptionHandling()
method (a171f44) - Support inline eloquent factory states (#19060)
- Allow
assertSessionHasErrors()
to look into different error bags (#19172, 4287ebc) - Ensure Redis is available in cache lock tests (#19791)
- Skip tests if Memcached is not found (#20018)
⚠️ ClearCarbon
mock during tear down (#19934)- Added debug info to
NotFoundHttpException
inInteractsWithExceptionHandling
(#20000) - Added
MailFake::assertSentTimes()
,QueueFake::assertPushedTimes()
andBusFake::assertDispatchedTimes()
methods (#20485, e657f6e) - Added queue assertions to
MailFake
(#20454, #20701) - Added
assertNothingSent()
andassertSentTimes()
methods toNotificationFake
(#20651) - Added Mockery expectations to the assertion count (#20606)
- Fake the default storage disk by default (#20625)
- Support sending default headers with requests (#20590, c32418e)
- Support disabling of exception handling for specified exceptions (#20729, 2db9716)
- Added support for custom validation rule objects (#19155, 2aa5ea8)
- Validate against
DateTimeInterface
instead ofDateTime
(#20110) ⚠️ Made several method inValidatesAttributes
public (#20200)⚠️ Addederrors()
method toValidator
interface (#20337)- Extend
Exists
andUnique
rule fromDatabaseRule
class (#20563) - Added
whereIn()
andwhereNotIn()
constraints toDatabaseRule
(#20691, #20739, 52d28e3) - Added
date_equals
rule (#20646)