Introducción a laravel

Bases de datos: introducción

Introducción

Laravel puede usar SQL nativo, generador de consultas  y  Eloquent ORM  para interactuar con la base de datos de manera muy simple en varios backends de bases de datos. Actualmente Laravel soporta cuatro bases de datos:

  • mysql
  • Postgres
  • SQLite
  • servidor SQL

Configuración

El archivo de configuración de la base de datos se coloca en  config/database.php el archivo donde puede definir todas las conexiones de la base de datos y especificar la conexión predeterminada que se utilizará. Este archivo proporciona ejemplos de la mayoría de las configuraciones de bases de datos admitidas por Laravel.

De forma predeterminada, la configuración del entorno de muestra de Laravel   utiliza  Laravel Homestead (esta es una pequeña máquina virtual que le permite desarrollar Laravel localmente fácilmente). Puede modificar esta configuración según las necesidades de su base de datos local.

configuración SQLite

touch database/database.sqlite Después de crear una nueva base de datos SQLite usando un comando como  este, puede configurar la variable de entorno para que apunte a la base de datos recién creada usando la ruta absoluta de la base de datos:

DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite

Conexiones de lectura y escritura

A veces desea que la declaración SELECT use una conexión de base de datos y las declaraciones INSERT, UPDATE y DELETE usen otra conexión de base de datos. Esto es pan comido en Laravel, ya sea que use consultas nativas, creadores de consultas o Eloquent ORM.

Para comprender cómo configurar la separación de lectura y escritura de la base de datos, veamos este ejemplo:

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'sticky'    => true,
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix'    => '',
],

Tenga en cuenta que en el ejemplo anterior, se agregaron 3 claves a la matriz de configuración  read: write y  stickyread y  write ambos contienen una  host matriz con clave. read Las otras  write configuraciones de base de datos de y están en la matriz principal con la  clave  mysql :

Si desea anular un elemento de configuración en la matriz principal, simplemente colóquelo en la  read matriz  write and. Entonces, en este ejemplo:  192.168.1.1 se usará como host para conexiones de "lectura" y  192.168.1.2 como host para conexiones de "escritura". Las dos conexiones compartirán  mysqlvarias configuraciones de la matriz principal, como credenciales de base de datos, prefijos, codificación de caracteres, etc.

sticky Opciones

sticky es un  valor opcional  que se puede utilizar para leer inmediatamente los registros que se han escrito en la base de datos durante el ciclo de solicitud actual. Si sticky está habilitado y se ha realizado una operación de "escritura" durante el ciclo de solicitud actual, cualquier operación de "lectura" utilizará la conexión de "escritura". Esto garantiza que los datos escritos en el mismo ciclo se puedan leer inmediatamente en el mismo ciclo. Si está habilitado o no depende de las necesidades de la aplicación.

Utilice múltiples conexiones de bases de datos

Cuando utilice varias conexiones de bases de datos, puede   acceder a cada conexión a través DB del método de fachada  . connectionAl  pasarlo name como  connection parámetro al método, puedes usar  config/database.php la conexión con el nombre correspondiente en el archivo de configuración:

$users = DB::connection('foo')->select(...);

También puede acceder a la instancia de PDO subyacente utilizando métodos en una instancia conectada  getPdo :

$pdo = DB::connection()->getPdo();

Ejecute consultas SQL nativas

Después de configurar la conexión de la base de datos, puede usar  DB Facade para ejecutar consultas. DB Facade proporciona métodos para cada tipo de consulta   :  select ,  update ,   y  .insertdeletestatement

Ejecutar consulta de selección

Puede utilizar   métodos DB de Facade  para ejecutar consultas básicas:select

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 显示所有应用程序的用户列表
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::select('select * from users where active = ?', [1]);

        return view('user.index', ['users' => $users]);
    }
}

El primer parámetro pasado al  select método es una consulta SQL nativa y el segundo parámetro es el valor del parámetro que debe vincularse a la consulta. Normalmente, estos valores se utilizan en  where declaraciones de restricciones. El enlace de parámetros se utiliza para evitar la inyección de SQL.

select El método siempre devolverá una matriz, cada resultado de la matriz es un  StdClass objeto y se puede acceder al valor del resultado como se muestra a continuación

foreach ($users as $user) {
    echo $user->name;
}

Usar enlaces con nombre

Además de utilizar  ? para representar enlaces de parámetros, también puede utilizar enlaces con nombre para ejecutar una consulta:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

Ejecutar declaración de inserción

Puede utilizar  métodos DB de Facade  insert para ejecutar  insert declaraciones. Al igual que  select con , este método toma la consulta SQL nativa como primer parámetro y los datos vinculados como segundo parámetro:

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

Ejecutar declaración de actualización

update El método se utiliza para actualizar registros existentes en la base de datos. Este método devuelve el número de filas afectadas por la declaración:

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

Ejecutar declaración de eliminación

delete El método se utiliza para eliminar registros de la base de datos. Como  update en, devuelve el número de filas afectadas por la declaración:

$deleted = DB::delete('delete from users');

Ejecutar declaraciones ordinarias

Algunas declaraciones de la base de datos no devolverán ningún valor. Para estas declaraciones, puede utilizar  DB el  statement método Facade para ejecutar:

DB::statement('drop table users');

Escuche los eventos de consulta

Si desea monitorear cada consulta SQL ejecutada por su programa, puede usar  listen el método. Este método es útil para registrar consultas o depurar. Puede   registrar su oyente de consultas con el proveedor de servicios :

<?php

namespace App\Providers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 启动应用服务
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
    }

    /**
     * 注册服务提供器
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

transacción de base de datos

Puede utilizar   métodos DB de fachada  para ejecutar un conjunto de operaciones dentro de una transacción de base de datos. transactionSi  Closure ocurre una excepción durante la transacción, la transacción se revertirá. Si  Closure la ejecución es exitosa, la transacción se confirmará automáticamente. No necesita preocuparse por  transaction revertir o confirmar manualmente cuando utiliza métodos:

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
});

Manejar punto muerto

transaction El método acepta un segundo parámetro opcional, que indica el número de reintentos cuando la transacción se bloquea. Una vez agotados estos intentos, se lanza una excepción:

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
}, 5);

Usar transacciones manualmente

Si desea iniciar una transacción manualmente y tener control total sobre la reversión y la confirmación, puede  DB utilizar  beginTransaction métodos en la fachada:

DB::beginTransaction();

Puede  rollBack revertir una transacción utilizando el método:

DB::rollBack();

Finalmente, puedes  commit confirmar la transacción usando el método:

DB::commit();

{tip}  DB Los métodos de transacción de la fachada también se aplican al  generador de consultas  y a  Eloquent ORM .

Supongo que te gusta

Origin blog.csdn.net/xyy_forever/article/details/82837941
Recomendado
Clasificación