- Allow testing anonymous notifiables (#21379)
- Add relation and model attributes on
RelationNotFoundException(#21426) - Allow passing a callback to
with()(#21445) - Added
PotentiallyMissinginterface toMissingValueclass (be7dccc) - Accept
$queuename onSchedule::job()(#21473) - Added callback and default parameter
whenLoaded()method (#21490) - Allow marking notifications as unread (#21497)
- Added
Collection::mapToDictionary()method (#21505) - Added
make:exceptioncommand (#21483)
- Reset RefreshDatabaseState after DatabaseMigrations rolls back (#21325)
- Make sure page resolver returns an integer (#21378)
- Allow single error messages in
ValidationException::withMessages()(#21400) - Revert
Collection::sortBy()behaviour to 5.4 (#21382) - Use fill instead of forceFill while storing pivot attributes (#21403)
- Alphabetize
vendor:publishoptions (#21412) - Extract
AnonymousResourceCollectioninto class to allow serialization (#21456) - Extract some methods from
ResourceintoConditionallyLoadsAttributestrait (28d945e, 1f37ccc)
- Ensure user is logged in before expecting user instance (#21377)
- Remove leading slash from class while resolving controllers (#21407)
- Make sure SQL for virtual columns is added after the unsigned modifier (#21441)
- Fixed
Collection::contains()when the found value isnull(#21442) - Fixed merge issue in
Relation::morphMap()(#21458) - Clear count query select bindings in
Relation::getRelationExistenceCountQuery()(#21468) - Fixed user model type hints policy stub (#21499)
- Added optional config option for whoops blacklist (#21336, a83ebc1)
- Added
Collection::pad()method (#21342)
- Made
$callbackparameter ofArr::sort()optional (#21337) - Support setting custom
REMOTE_ADDRinMakesHttpRequests(#21351) - Changed visibility of
$outputto public on console events (#21356)
- Don't compare remember token in user providers if it's
null(srsly for real this time, pinky promise) (#21328, #21368)
- Added "software" as an uncountable word (#21324)
- Don't compare remember token if it's
null(#21328)
- Added
Route::respondWithRoute($name)method (#21299, 66c5e46) - Added
$strictparameter toTestResponse::assertJson()(#21301)
- Added "firmware" as an uncountable word (#21306)
- Allow
MorphTo::associate()acceptnull(#21318) - Changed
__()signature to matchTranslation::trans()(10c013c)
- Add missing
driverparameter to doctrine connection (#21297)
- Perform constant-time token comparison in
DatabaseUserProvider(#21320)
- Perform stable sort in
Collection::sortBy()(2nd attempt) (#21270) - Return empty string if database session key is expired (#21277)
- Fixed setting
Model::UPDATED_ATinSoftDeletes(#21286) - Apply custom pivot model attribute casting on arrays (#21275)
- Fixed issue with routes sorting (#21261)
- Fix
CacheClearCommandbinding (#21256)
- Reverted stable sort support in
Collection::sortBy()(#21255)
- Added
:inputplaceholder in validation error messages (#21175) - Added
@includeFirstBlade directive (#21172) - Allow setting column styles for tables in Artisan commands (#21169)
- Added
ValidatesRequests::extractInputFromRules()method (#21192) - Added
-mshortcut tomake:factory(#21219) - Added ability to set a fallback (catch-all) route (#21234)
- Support
nullonModel::UPDATED_AT(#21178) - Render views from config while building error views (#21145)
- Use multibyte functions in some
Strmethods (#21207) - Perform stable sort in
Collection::sortBy()(#21214)
- Ignore
SELECTbindings inprepareBindingsForUpdate()(#21173) - Fixed
remembercheck inAuthenticatesUsers::attemptLogin()(#21221) - Added "hardware" as an uncountable word (#21236)
- Added
Blueprint::spatialIndex()method (#21070) - Added support for SQL Server's
TransactionIsolationDSN 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
nullfromRoute::getAction()if$keyis not found (#21083) - Restore non-static signature of
Router::prepareResponse()(#21114, e1a1265) - Removed
Modeltype hint fromModel::isNot()(4d8f0a1) - Prefer
JsonableoverArrayableinJsonResponse::setData()(#21136) - Reset
ccandbccinMailer::setGlobalTo()(#21137) - Avoid trace
argsin JSON exceptions (#21149)
- Fixed
@jsondirective 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
MissingValuewhile resolving resource (#21127) - Fixed
getQualifiedParentKey()onBelongsToManyrelationships (#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
$actionparameter toRoute::getAction()for simpler access (#20975) - Added
@jsonblade directive (#21004) - Added
rescue()helper (#21010, 74ecb34, c4d1c47) - Support commas in
InandNotInparameters (#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
$thisfromValidator::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
decayMinutesis more than1(#20997) - Only use reflection on classes in
Kernel::load()(#20998) - Specify lower case
column_nameinMySqlGrammar::compileColumnListing()(#21037) - Fixed eager loading problem with
BelongsToMany(#21044)
- Remove unnecessary
lcfirst()call inauthorizeResource()(#21017) - Removed
$listensForfrom listener stubs (#21039)
- Added
movextension andMimeType::search()method (#20917) - Added support for
dont-discoverin packages (#20921, 4a6f1f2) - Added
retrievedmodel event (#20852, 84291a6) - Added
HasOneOrMany::setForeignAttributesForCreate()method (#20871) - Made
Routemacroable (#20970)
- Load deferred providers before commands (366c50e)
- Don't pass cache instance to Schedule anymore (#20916, #20933)
- Simplified
mixrequire (#20929) - Return
nullif resource attribute contains relation with a null value (#20969)
- Prevent
ErrorExceptioninCollection::operatorForWhere()method (#20913) - Create default console input/output in
Application::run()(#20922, 7647399) - Ignore abstract classes in
Kernel::load()(#20931) - Fixed
listener-queued-duck.stubfilename (#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::$collectsvisibility topublic(#20885)
- Fixed
choice()on non-tty terminals (#20840) - Fixed Macroable calls on
Optional(#20845, #20898) - Fixed
dropAllTables()when usingPDO::FETCH_ASSOCmode (#20859) - Pass model name to
ModelNotFoundException::setModel()(#20896, 891f90e) - Fixed
Basicauthentication (#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
buildscripts (7c16b15) - Upgraded to Symfony 3.3 components (4db7031, 67a5367)
- Throw
RuntimeExceptionwhen app key is missing (#19145, 8adbaa7)
- Added interactive prompt to
vendor:publish(#18230) - Added
migrate:freshcommand (f6511d4, #20090) - Added
make:factorycommand and added--factorytomake:model(a6ffd8b, #19985) - Added
make:rulecommand (76853fd) ⚠️ AddedrunningInConsole()methodApplicationcontract (#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
--createoption when generation migrations (#20032) - Generate
make:policywith real user model namespace (#20047) - Added
Kernel::load()to auto register a directory of commands (2e7ddca, d607b9c) ⚠️ Removedarraytype hint fromCommand::table()(#20120)- Support loading multiple paths in
Kernel::load()(#20251, #20595) - Added
CommandStartingandCommandFinishedevents (#20298) - Show error message if a reverted migration is not found (#20499, a895b1e)
- Set correct namespace in model factories when using the
app:namecommand (#20766) ⚠️ Switched the-fshortcut from--forceto--factoryonmake:modelcommand (#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
RequestGuardoptional (d7f0b26) - Use
setRememberToken()inResetsPasswords(#19189) - Added a
PasswordResetevent (#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 toGatecontract (#19173)⚠️ ImplementiterableonGate::check()andGate::any()(#20084)
- Added
Blade::if()method (71dfe0f, 2905364, #20025) - Added
@switch,@case,@breakand@defaultdirectives (#19758) ⚠️ Prevent Blade from parsing PHP code inside@phpblocks (#20065)
⚠️ UseAccessDeniedHttpExceptioninstead 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
DatetimeInterfaceandDateIntervalin cache repository (#20034) - Added
getStore()method to cacheRepositoryinterface (#20338) ⚠️ MadeRateLimiterless 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()andmapSpreadcallback (#20783, #20723)
- Added
Config::getMany()method (#19770)
⚠️ AddeddropAllTables()to schema builder (#18484, d910bc8, #19644, #19645, #20239, #20536)- Added precision to
dateTimeandtimestampcolumn 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$localKeyparameter toHasRelationships::belongsToMany()andBelongsToMany(#17903, 7c7c3bc)⚠️ Added$parentKeyparameter tobelongsToMany(),BelongsToManyandMorphToMany(#17915, #18380)⚠️ Renamed$parentproperty to$pivotParentinPivotclass (#17933, #18150)⚠️ Don't add_countsuffix to column name when usingwithCount()with an alias (#17871)⚠️ Renamed$eventsto$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
nullcomparison 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
Pivotmethods (8d82618) - Default
$attributesonBelongsToMany::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$dontReportinto$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)
⚠️ ReturnHttpExceptionwith code413fromPostTooLargeException(#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 betweenFilesystemAdapterand theFilesysteminterface (#19389)
- Added
report()helper (2b67619) - Added
throw_if()andthrow_unless()helpers (18bb4df, #19166, #19255) - Added
dispatch_now()helper (#18668, 61f2e7b) - Added
$languageparameter 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)
⚠️ MovedLoaderInterfaceto 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$dataand$callbackparameters fromMailerandMailQueue⚠️ MadeMarkdowna dependency ofMailChannel(#19349)⚠️ Upgraded to SwiftMailer 6 (#19356)⚠️ Addedto()andbcc()toMailercontract (#19955)
- Added methods for Slack's
thumb_urlandunfurl_*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$queueparameter fromQueue::createPayload()(#17948)- Made all
getQueue()methodspublic(#18501) - Pass connection and queue to
Loopingevent (#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
DatetimeInterfaceandDateIntervalin queue (#20102, 92e2aff) ⚠️ Usedispatch()instead offire()(#20446)- Removed
reserved_atindex 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
ValidatesRequestscalls (#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 fromValidatesRequestswithout 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 tonullinstead 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) ⚠️ ImprovedThrottleRequestsmiddleware (#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
HEADrequests inRouter::view()(#20672) - Added
ThrottleRequestsWithRedismiddleware (#20761, 0a10f9a)
⚠️ EnsureArrayableandJsonablereturn aJsonResponse(#17875)⚠️ EnsureArrayableobjects are also morphed byResponse(#17868)- Added
SameSitesupport toCookieJar(#18040, #18059, e69d722) - Accept
HeaderBaginResponseTrait::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 totrueinStore::flash()(#18136)⚠️ Store the user password hash when logging in (#19843)⚠️ ThrowUnauthorizedHttpExceptionfromfailedBasicResponse(#20673)
- Autoload package providers (#19420, a5a0f3e, 2954091, #19455, #19561, #19646)
- Added support for
Responsableobjects (c0c89fd, 1229b7f, #19614, ef0e37d) - Made
Carbonmacroable and serializeable (#19771, #20568, 6a18209) - Support registering macros using classes (#19782, 353adbd)
⚠️ MovedInteractsWithTimetoIlluminate\Support(#20119, #20206)- Support callable/invokable objects in
Pipeline(#18264) ⚠️ Prevent access to protected properties using array access onModelandFluent(#18403)⚠️ ExtendMessageBaginterface fromArrayableand addgetMessages()method (#19768, #20334)- Handle
Arrayableitems inMessageBag(6f1f4d8) - Added
isNotEmpty()method to message bags and paginators (#19944) - Return the collection iterator from
AbstractPaginator::getIterator()(#20098) ⚠️ Fixed minimum value of paginatorlast_pagefield (#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 intoRefreshDatabasetrait (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)
⚠️ ClearCarbonmock during tear down (#19934)- Added debug info to
NotFoundHttpExceptioninInteractsWithExceptionHandling(#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
DateTimeInterfaceinstead ofDateTime(#20110) ⚠️ Made several method inValidatesAttributespublic (#20200)⚠️ Addederrors()method toValidatorinterface (#20337)- Extend
ExistsandUniquerule fromDatabaseRuleclass (#20563) - Added
whereIn()andwhereNotIn()constraints toDatabaseRule(#20691, #20739, 52d28e3) - Added
date_equalsrule (#20646)