一、使用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 方法。