Laravel操作数据库

一、使用DB方式操作数据库(方式一)

        $data = DB::table('core_region')->select(['national_code', 'region_name', 'parent_id'])
            ->where('national_code', '<', 110117)
            ->offset(15)
            ->limit(10)
            ->orderBy('national_code', 'desc')
            ->get();
        return $data;

更多构造查询方式参考 Laravel 中文文档

三、使用Eloquent模型方式操作数据库(方式二)

1、模型的作用

如果你使用习惯了Yii框架的关联查询方式,那么在使用Laravel框架时,使用这种模型方式是比较合适的。

 
2、创建模型

php artisan make:model models/CoreRegion

使用该命令后,将在 app\models\ 目录下创建一个名为 CoreRegion.php 的文件

 
3、定义必要的模型设置 (app\models\CoreRegion.php)

<?php

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class CoreRegion extends Model
{

    // 定义连接的数据库连接,不定义该字段时,则选择laravel中默认的数据库连接位置
    // 如果选择另外的RDS,可以选择添加一个数据库连接,这里填写那个连接定义的键,在 \config\database.php设置新的连接位置
    protected $connection = 'mysql_SH';

    // 定义关联该模型的数据表名称
    protected $table = 'core_region';

    // 设置模型不自动维护时间戳 created_at 和 updated_at,可以不定义该字段
    // public $timestamps = false;

    // 设置自动维护时间戳时,字段名称,可以不定义
    // const CREATED_AT = 'create_time';
    // const UPDATED_AT = 'update_time';

}

 
4、使用举例:

<?php
declare(strict_types = 1);

namespace App\Http\Controllers\goods;

use App\Http\Controllers\Controller;
use App\models\CoreRegion;


class ProductController extends Controller
{
    public function index()
    {
        // yii框架将数据转换为数组是asArray方法,Laravel是toArray方法
        $data = CoreRegion::all(['national_code', 'region_name', 'parent_id'])
            ->where('national_code', '>', '152923')
            ->whereIn('parent_id', [210000, 420600])
            ->forPage(22, 3) // 第1个参数是第几页,第二个参数是每页多少
            ->toArray()
        ;
        echo "<pre>";
        print_r($data);
        exit();
    }
}

注:Laravel使用 方式操作数据库,是没有直接的limit 和 offset方法的,如果单独的limit,我们可以使用take方法代替,作用是一样的;如果是分页,则可以使用 forPage 方法代替。

这里为了方便,将数据库操作放在了控制器中,实际上应该放在独立出来的service层中去处理数据。

三、Laravel 和 Yii 框架在操作数据库时的不同之处

(1)Yii框架操作数据库时,需要先生成对应的数据表model(访问website/gii),然后在代码中使用时,是需要关联到具体的model文件上的,在这个例子中,就关联到文件 ProductCategory.php 上了。

use app\models\ProductCategory;
...
$list = ProductCategory::find()
            ->select(['category_id', 'category_name'])
            ->where(['level' => 1, 'is_delete' => 0])
            ->asArray()
            ->all();

 
(2)Laravel框架使用的是门面模式,并没有在代码中有实际的数据表代码,也就是说操作数据库时,并不需要 use 具体的类。

use Illuminate\Support\Facades\DB;
...
public function index()
    {
        $data = DB::table('core_region')->select(['national_code', 'region_name', 'parent_id'])
            ->where('national_code', '<', 110117)
            ->offset(15)
            ->limit(10)
            ->orderBy('national_code', 'desc')
            ->get();
        return $data;
    }

如果习惯使用了Yii框架的数据库操作方式,使用模型Eloquent这种方式操作数据库是一个不错的选择,使用起来几乎没有任何不适感。

注:Yii框架中将查询出的数据转换为数组是 AsArray 方法,而Laravel中是 toArray 方法。