
本文讲解 laravel 新手如何通过 eloquent 模型或 query builder 从数据库读取数据并渲染到首页,涵盖模型创建、控制器调用、视图展示全流程,并为后续构建后台编辑功能奠定基础。
本文讲解 laravel 新手如何通过 eloquent 模型或 query builder 从数据库读取数据并渲染到首页,涵盖模型创建、控制器调用、视图展示全流程,并为后续构建后台编辑功能奠定基础。
在 Laravel 中实现“数据库驱动的首页”(如动态 Banner 标题、欢迎语、SEO 描述等),核心在于将静态 HTML 内容替换为从数据库查询出的结构化数据。与原生 PHP 的 PDO 直连不同,Laravel 提供了两种主流方式:推荐使用 Eloquent ORM(基于模型),兼顾可维护性与 Laravel 生态优势;也可临时采用 Query Builder 快速上手。下面以一个典型场景为例——首页需显示一条可编辑的「欢迎标语」(存储于 home_contents 表中,字段为 id, key, value, updated_at)——完整演示实现路径。
✅ 第一步:准备数据库表
首先运行迁移创建数据表:
php artisan make:migration create_home_contents_table
编辑生成的迁移文件,定义表结构:
// database/migrations/xxxx_xx_xx_create_home_contents_table.php
public function up(MigrationBuilder $builder): void
{
Schema::create('home_contents', function (Blueprint $table) {
$table->id();
$table->string('key')->unique(); // 如 'welcome_title', 'hero_subtitle'
$table->text('value');
$table->timestamps();
});
// 插入示例数据(可选)
DB::table('home_contents')->insert([
['key' => 'welcome_title', 'value' => '欢迎来到我们的 Laravel 网站!'],
['key' => 'hero_subtitle', 'value' => '专注优雅、高效的 Web 开发'],
]);
}
执行迁移:
php artisan migrate
✅ 第二步:创建模型(推荐方式)
运行命令生成模型(注意:Laravel 9+ 默认模型位于 app/Models):
php artisan make:model HomeContent
编辑 app/Models/HomeContent.php,明确指定表名与可批量赋值字段:
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class HomeContent extends Model
{
use HasFactory;
protected $table = 'home_contents'; // 显式声明表名(若命名规范可省略)
protected $primaryKey = 'id';
public $timestamps = true; // 启用 created_at/updated_at
// 允许批量赋值的字段(为后续后台编辑做准备)
protected $fillable = ['key', 'value'];
}✅ 第三步:在控制器中查询并传递数据
修改首页控制器(如 app/Http/Controllers/HomeController.php),引入模型并查询所需内容:
<?php namespace App\Http\Controllers;
use App\Models\HomeContent;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
// 查询多条内容,按 key 获取(更灵活)
$contents = HomeContent::pluck('value', 'key')->toArray();
// 或分别查询(适合少量固定字段)
// $welcomeTitle = HomeContent::where('key', 'welcome_title')->value('value');
// $heroSubtitle = HomeContent::where('key', 'hero_subtitle')->value('value');
return view('home', [
'welcome_title' => $contents['welcome_title'] ?? '默认欢迎标题',
'hero_subtitle' => $contents['hero_subtitle'] ?? '默认副标题',
]);
}
}✅ 第四步:在视图中渲染动态内容
编辑首页视图 resources/views/home.blade.php:
<title>我的 Laravel 首页</title><header><h1>{{ $welcome_title }}</h1>
<p>{{ $hero_subtitle }}</p>
</header><!-- 其他页面内容 -->⚠️ 替代方案:使用 Query Builder(快速验证用)
若暂不创建模型,可在控制器中直接使用 DB Facade(需先 use Illuminate\Support\Facades\DB;):
use Illuminate\Support\Facades\DB;
public function index()
{
$welcomeTitle = DB::table('home_contents')
->where('key', 'welcome_title')
->value('value');
return view('home', ['welcome_title' => $welcomeTitle ?? '未设置']);
}? 注意:Query Builder 缺乏模型的关联、作用域、事件等高级能力,仅建议用于原型验证或极简场景;长期维护务必转向 Eloquent 模型。
✅ 后续扩展提示(为 Admin Panel 铺路)
- ✅ 后台编辑入口:创建
Admin\HomeContentController,提供index,edit,update方法; - ✅ 表单验证:在
update方法中使用request()->validate()校验key和value; - ✅ 缓存优化:首页内容变动不频繁,可用
Cache::remember('home_contents', 3600, fn() => ...)减少数据库查询; - ✅ 安全提醒:所有用户输入必须经
validate()过滤,避免 SQL 注入或 XSS(Blade 的{{ }}默认转义已防护 XSS)。
掌握模型驱动的数据加载,是构建可维护 Laravel 应用的第一块基石——它让首页不再静态,也为未来 CMS 化、多语言、A/B 测试等扩展留出清晰接口。











