Unexpectedvalueexception Php Artisan Key Generate
Application Key. The next thing you should do after installing Laravel is set your application key to a random string. If you installed Laravel via Composer or the Laravel installer, this key has already been set for you by the php artisan key:generate command. Typically, this string should be 32 characters long. Aug 01, 2015 When trying to generate an new controller with artisan I get this error: 'Invalid route action: AppHttpControllersMyNewController' Help - Solved. Terminal command: php artisan make:controller MyNewController. If you have any errors in your current PHP files, artisan can get a bit upset. Check your routes file and make sure it's valid. Php artisan key:generate is a command that sets the APPKEY value in your.env file. By default, this command is run following a composer create-project laravel/laravel command. If you use a version control system like git to manage your project for development, calling git push. Will push a copy of your Laravel project to wherever it is.
- Unexpectedvalueexception Php Artisan Key Generate Program
- Unexpectedvalueexception Php Artisan Key Generate Key
- Unexpectedvalueexception Php Artisan Key Generate Login
- Unexpectedvalueexception Php Artisan Key Generate Account
- Unexpectedvalueexception Php Artisan Key Generate Key
When you use the php artisan key:generate it will generate the new key to your.env file and not the app.php file. You can generate a key by the following command: The key will be written automatically in your.env file. Note: The.env is a hidden file in your project folder. I am not sure why PDO would even be invoked in the key generation, but you can try just using any 32-character string as the key in your app config instead of running the key generator.
- Defining Models
- Retrieving Models
- Retrieving Single Models / Aggregates
- Inserting & Updating Models
- Deleting Models
- Query Scopes
- Events
Introduction
Dismiss Join GitHub today. GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Php artisan key:generate 执行完后便可以正常打开项目了. 如果用的是 lumen 框架,框架内部简化了 artisan 命令, 执行 php artisan key:gengrate 会报错,这是需要利用路由生成 APPKEY.
The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding 'Model' which is used to interact with that table. Models allow you to query for data in your tables, as well as insert new records into the table.
Before getting started, be sure to configure a database connection in config/database.php
. For more information on configuring your database, check out the documentation.
Defining Models
Unexpectedvalueexception Php Artisan Key Generate Program
To get started, let's create an Eloquent model. Models typically live in the app
directory, but you are free to place them anywhere that can be auto-loaded according to your composer.json
file. All Eloquent models extend IlluminateDatabaseEloquentModel
class.
The easiest way to create a model instance is using the make:model
Artisan command:
If you would like to generate a database migration when you generate the model, you may use the --migration
or -m
option:
Eloquent Model Conventions
Now, let's look at an example Flight
model, which we will use to retrieve and store information from our flights
database table:
Table Names
Note that we did not tell Eloquent which table to use for our Flight
model. By convention, the 'snake case', plural name of the class will be used as the table name unless another name is explicitly specified. So, in this case, Eloquent will assume the Flight
model stores records in the flights
table. You may specify a custom table by defining a table
property on your model:
Primary Keys
Eloquent will also assume that each table has a primary key column named id
. You may define a protected $primaryKey
property to override this convention:
In addition, Eloquent assumes that the primary key is an incrementing integer value, which means that by default the primary key will automatically be cast to an int
. If you wish to use a non-incrementing or a non-numeric primary key you must set the public $incrementing
property on your model to false
:
If your primary key is not an integer, you should set the protected $keyType
property on your model to string
:
Timestamps
By default, Eloquent expects created_at
and updated_at
columns to exist on your tables. If you do not wish to have these columns automatically managed by Eloquent, set the $timestamps
property on your model to false
:
If you need to customize the format of your timestamps, set the $dateFormat
property on your model. This property determines how date attributes are stored in the database, as well as their format when the model is serialized to an array or JSON:
If you need to customize the names of the columns used to store the timestamps, you may set the CREATED_AT
and UPDATED_AT
constants in your model:
Database Connection
By default, all Eloquent models will use the default database connection configured for your application. If you would like to specify a different connection for the model, use the $connection
property:
Default Attribute Values
Call of duty cd key generator. If you would like to define the default values for some of your model's attributes, you may define an $attributes
property on your model:
Retrieving Models
Once you have created a model and its associated database table, you are ready to start retrieving data from your database. Think of each Eloquent model as a powerful query builder allowing you to fluently query the database table associated with the model. For example:
Adding Additional Constraints
The Eloquent all
method will return all of the results in the model's table. Since each Eloquent model serves as a query builder, you may also add constraints to queries, and then use the get
method to retrieve the results:
{tip} Since Eloquent models are query builders, you should review all of the methods available on the query builder. You may use any of these methods in your Eloquent queries.
Refreshing Models
You can refresh models using the fresh
and refresh
methods. The fresh
method will re-retrieve the model from the database. The existing model instance will not be affected:
The refresh
method will re-hydrate the existing model using fresh data from the database. In addition, all of its loaded relationships will be refreshed as well:
Collections
For Eloquent methods like all
and get
which retrieve multiple results, an instance of IlluminateDatabaseEloquentCollection
will be returned. The Collection
class provides a variety of helpful methods for working with your Eloquent results:
You may also loop over the collection like an array:
Chunking Results
If you need to process thousands of Eloquent records, use the chunk
command. The chunk
method will retrieve a 'chunk' of Eloquent models, feeding them to a given Closure
for processing. Using the chunk
method will conserve memory when working with large result sets:
The first argument passed to the method is the number of records you wish to receive per 'chunk'. The Closure passed as the second argument will be called for each chunk that is retrieved from the database. A database query will be executed to retrieve each chunk of records passed to the Closure.
Using Cursors
The cursor
method allows you to iterate through your database records using a cursor, which will only execute a single query. When processing large amounts of data, the cursor
method may be used to greatly reduce your memory usage:
The cursor
returns an IlluminateSupportLazyCollection
instance. Lazy collections allow you to use many of collection methods available on typical Laravel collections while only loading a single model into memory at a time:
Advanced Subqueries
Subquery Selects
Eloquent also offers advanced subquery support, which allows you to pull information from related tables in a single query. For example, let's imagine that we have a table of flight destinations
and a table of flights
to destinations. The flights
table contains an arrived_at
column which indicates when the flight arrived at the destination.
Using the subquery functionality available to the select
and addSelect
methods, we can select all of the destinations
and the name of the flight that most recently arrived at that destination using a single query:
Subquery Ordering
In addition, the query builder's orderBy
function supports subqueries. We may use this functionality to sort all destinations based on when the last flight arrived at that destination. Again, this may be done while executing a single query against the database:
Retrieving Single Models / Aggregates
In addition to retrieving all of the records for a given table, you may also retrieve single records using find
, first
, or firstWhere
. Instead of returning a collection of models, these methods return a single model instance:
You may also call the find
method with an array of primary keys, which will return a collection of the matching records:
Sometimes you may wish to retrieve the first result of a query or perform some other action if no results are found. The firstOr
method will return the first result that is found or, if no results are found, execute the given callback. The result of the callback will be considered the result of the firstOr
method:
The firstOr
method also accepts an array of columns to retrieve:
Not Found Exceptions
Sometimes you may wish to throw an exception if a model is not found. This is particularly useful in routes or controllers. The findOrFail
and firstOrFail
methods will retrieve the first result of the query; however, if no result is found, a IlluminateDatabaseEloquentModelNotFoundException
will be thrown:
If the exception is not caught, a 404
HTTP response is automatically sent back to the user. It is not necessary to write explicit checks to return 404
responses when using these methods:
Retrieving Aggregates
You may also use the count
, sum
, max
, and other aggregate methods provided by the query builder. These methods return the appropriate scalar value instead of a full model instance:
Inserting & Updating Models
Inserts
To create a new record in the database, create a new model instance, set attributes on the model, then call the save
method:
In this example, we assign the name
parameter from the incoming HTTP request to the name
attribute of the AppFlight
model instance. When we call the save
method, a record will be inserted into the database. The created_at
and updated_at
timestamps will automatically be set when the save
method is called, so there is no need to set them manually.
Updates
The save
method may also be used to update models that already exist in the database. To update a model, you should retrieve it, set any attributes you wish to update, and then call the save
method. Again, the updated_at
timestamp will automatically be updated, so there is no need to manually set its value:
Mass Updates
Updates can also be performed against any number of models that match a given query. In this example, all flights that are active
and have a destination
of San Diego
will be marked as delayed:
The update
method expects an array of column and value pairs representing the columns that should be updated.
{note} When issuing a mass update via Eloquent, the saving
, saved
, updating
, and updated
model events will not be fired for the updated models. This is because the models are never actually retrieved when issuing a mass update.
Examining Attribute Changes
Eloquent provides the isDirty
, isClean
, and wasChanged
methods to examine the internal state of your model and determine how its attributes have changed from when they were originally loaded.
The isDirty
method determines if any attributes have been changed since the model was loaded. You may pass a specific attribute name to determine if a particular attribute is dirty. The isClean
method is the opposite of isDirty
and also accepts an optional attribute argument:
The wasChanged
method determines if any attributes were changed when the model was last saved within the current request cycle. You may also pass an attribute name to see if a particular attribute was changed:
Mass Assignment
You may also use the create
method to save a new model in a single line. The inserted model instance will be returned to you from the method. However, before doing so, you will need to specify either a fillable
or guarded
attribute on the model, as all Eloquent models protect against mass-assignment by default.
A mass-assignment vulnerability occurs when a user passes an unexpected HTTP parameter through a request, and that parameter changes a column in your database you did not expect. For example, a malicious user might send an is_admin
parameter through an HTTP request, which is then passed into your model's create
method, allowing the user to escalate themselves to an administrator.
So, to get started, you should define which model attributes you want to make mass assignable. You may do this using the $fillable
property on the model. For example, let's make the name
attribute of our Flight
model mass assignable:
Once we have made the attributes mass assignable, we can use the create
method to insert a new record in the database. The create
method returns the saved model instance:
If you already have a model instance, you may use the fill
method to populate it with an array of attributes:
Guarding Attributes
While $fillable
serves as a 'white list' of attributes that should be mass assignable, you may also choose to use $guarded
. The $guarded
property should contain an array of attributes that you do not want to be mass assignable. All other attributes not in the array will be mass assignable. So, $guarded
functions like a 'black list'. Importantly, you should use either $fillable
or $guarded
- not both. In the example below, all attributes except for price
will be mass assignable:
If you would like to make all attributes mass assignable, you may define the $guarded
property as an empty array:
Other Creation Methods
firstOrCreate
/ firstOrNew
There are two other methods you may use to create models by mass assigning attributes: firstOrCreate
and firstOrNew
. The firstOrCreate
method will attempt to locate a database record using the given column / value pairs. If the model can not be found in the database, a record will be inserted with the attributes from the first parameter, along with those in the optional second parameter.
The firstOrNew
method, like firstOrCreate
will attempt to locate a record in the database matching the given attributes. However, if a model is not found, a new model instance will be returned. Note that the model returned by firstOrNew
has not yet been persisted to the database. You will need to call save
manually to persist it:
updateOrCreate
You may also come across situations where you want to update an existing model or create a new model if none exists. Laravel provides an updateOrCreate
method to do this in one step. Like the firstOrCreate
method, updateOrCreate
persists the model, so there's no need to call save()
:
Deleting Models
To delete a model, call the delete
method on a model instance:
Deleting An Existing Model By Key
In the example above, we are retrieving the model from the database before calling the delete
method. However, if you know the primary key of the model, you may delete the model without retrieving it by calling the destroy
method. In addition to a single primary key as its argument, the destroy
method will accept multiple primary keys, an array of primary keys, or a collection of primary keys:
Deleting Models By Query
You can also run a delete statement on a set of models. In this example, we will delete all flights that are marked as inactive. Like mass updates, mass deletes will not fire any model events for the models that are deleted:
{note} When executing a mass delete statement via Eloquent, the deleting
and deleted
model events will not be fired for the deleted models. This is because the models are never actually retrieved when executing the delete statement.
Soft Deleting
Unexpectedvalueexception Php Artisan Key Generate Key
In addition to actually removing records from your database, Eloquent can also 'soft delete' models. When models are soft deleted, they are not actually removed from your database. Instead, a deleted_at
attribute is set on the model and inserted into the database. If a model has a non-null deleted_at
value, the model has been soft deleted. To enable soft deletes for a model, use the IlluminateDatabaseEloquentSoftDeletes
trait on the model:
{tip} The SoftDeletes
trait will automatically cast the deleted_at
attribute to a DateTime
/ Carbon
instance for you.
You should also add the deleted_at
column to your database table. The Laravel schema builder contains a helper method to create this column:
Now, when you call the delete
method on the model, the deleted_at
column will be set to the current date and time. And, when querying a model that uses soft deletes, the soft deleted models will automatically be excluded from all query results.
To determine if a given model instance has been soft deleted, use the trashed
method:
Querying Soft Deleted Models
Including Soft Deleted Models
As noted above, soft deleted models will automatically be excluded from query results. However, you may force soft deleted models to appear in a result set using the withTrashed
method on the query:
The withTrashed
method may also be used on a relationship query:
Retrieving Only Soft Deleted Models
The onlyTrashed
method will retrieve only soft deleted models:
Restoring Soft Deleted Models
Sometimes you may wish to 'un-delete' a soft deleted model. To restore a soft deleted model into an active state, use the restore
method on a model instance:
You may also use the restore
method in a query to quickly restore multiple models. Again, like other 'mass' operations, this will not fire any model events for the models that are restored:
Like the withTrashed
method, the restore
method may also be used on relationships:
Permanently Deleting Models
Sometimes you may need to truly remove a model from your database. To permanently remove a soft deleted model from the database, use the forceDelete
method:
Replicating Models
You may create an unsaved copy of a model instance using the replicate
method. This is particularly useful when you have model instances that share many of the same attributes:
Query Scopes
Global Scopes
Global scopes allow you to add constraints to all queries for a given model. Laravel's own soft delete functionality utilizes global scopes to only pull 'non-deleted' models from the database. Writing your own global scopes can provide a convenient, easy way to make sure every query for a given model receives certain constraints.
Writing Global Scopes
Writing a global scope is simple. Define a class that implements the IlluminateDatabaseEloquentScope
interface. This interface requires you to implement one method: apply
. The apply
method may add where
constraints to the query as needed:
Unexpectedvalueexception Php Artisan Key Generate Login
{tip} If your global scope is adding columns to the select clause of the query, you should use the addSelect
method instead of select
. This will prevent the unintentional replacement of the query's existing select clause.
Applying Global Scopes
To assign a global scope to a model, you should override a given model's booted
method and use the addGlobalScope
method:
After adding the scope, a query to User::all()
will produce the following SQL:
Anonymous Global Scopes
Eloquent also allows you to define global scopes using Closures, which is particularly useful for simple scopes that do not warrant a separate class:
Removing Global Scopes
Unexpectedvalueexception Php Artisan Key Generate Account
If you would like to remove a global scope for a given query, you may use the withoutGlobalScope
method. The method accepts the class name of the global scope as its only argument:
Or, if you defined the global scope using a Closure:
If you would like to remove several or even all of the global scopes, you may use the withoutGlobalScopes
method:
Local Scopes
Local scopes allow you to define common sets of constraints that you may easily re-use throughout your application. For example, you may need to frequently retrieve all users that are considered 'popular'. To define a scope, prefix an Eloquent model method with scope
.
Scopes should always return a query builder instance:
Utilizing A Local Scope
Once the scope has been defined, you may call the scope methods when querying the model. However, you should not include the scope
prefix when calling the method. You can even chain calls to various scopes, for example:
Combining multiple Eloquent model scopes via an or
query operator may require the use of Closure callbacks:
Unexpectedvalueexception Php Artisan Key Generate Key
However, since this can be cumbersome, Laravel provides a 'higher order' orWhere
method that allows you to fluently chain these scopes together without the use of Closures:
Dynamic Scopes
Sometimes you may wish to define a scope that accepts parameters. To get started, just add your additional parameters to your scope. Scope parameters should be defined after the $query
parameter:
Now, you may pass the parameters when calling the scope:
Comparing Models
Sometimes you may need to determine if two models are the 'same'. The is
method may be used to quickly verify two models have same primary key, table, and database connection:
Events
Eloquent models fire several events, allowing you to hook into the following points in a model's lifecycle: retrieved
, creating
, created
, updating
, updated
, saving
, saved
, deleting
, deleted
, restoring
, restored
. Events allow you to easily execute code each time a specific model class is saved or updated in the database. Each event receives the instance of the model through its constructor.
The retrieved
event will fire when an existing model is retrieved from the database. When a new model is saved for the first time, the creating
and created
events will fire. If a model already existed in the database and the save
method is called, the updating
/ updated
events will fire. However, in both cases, the saving
/ saved
events will fire.
{note} When issuing a mass update or delete via Eloquent, the saved
, updated
, deleting
, and deleted
model events will not be fired for the affected models. This is because the models are never actually retrieved when issuing a mass update or delete.
To get started, define a $dispatchesEvents
property on your Eloquent model that maps various points of the Eloquent model's lifecycle to your own event classes:
After defining and mapping your Eloquent events, you may use event listeners to handle the events.
Using Closures
Instead of using custom event classes, you may register Closures that execute when various model events are fired. Typically, you should register these Closures in the booted
method of your model:
Observers
Defining Observers
If you are listening for many events on a given model, you may use observers to group all of your listeners into a single class. Observers classes have method names which reflect the Eloquent events you wish to listen for. Each of these methods receives the model as their only argument. The make:observer
Artisan command is the easiest way to create a new observer class:
This command will place the new observer in your App/Observers
directory. If this directory does not exist, Artisan will create it for you. Your fresh observer will look like the following:
To register an observer, use the observe
method on the model you wish to observe. You may register observers in the boot
method of one of your service providers. In this example, we'll register the observer in the AppServiceProvider
: