主页/PHP笔记/PHP问答/框架Laravel/Laravel Eloquent:增删改查示例

Laravel Eloquent:增删改查示例

Bug编译狮

Bug编译狮

Laravel 是一个非常流行的 PHP 框架,它提供了强大的 ORM(对象关系映射)工具,使得数据库操作变得异常简单。下面是一个使用 Laravel Eloquent 进行增删改查的示例。

1. 安装 Laravel

首先,确保你已经安装了 Composer。然后,创建一个新的 Laravel 项目:

composer create-project --prefer-dist laravel/laravel my-laravel-app
cd my-laravel-app

2. 配置数据库连接

.env 文件中配置你的数据库连接信息:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_laravel_app
DB_USERNAME=root
DB_PASSWORD=

3. 创建模型和迁移

假设我们有一个名为 User 的模型,并且需要进行增删改查操作。首先,生成模型:

php artisan make:model User

接下来,生成对应的迁移文件:

php artisan make:migration create_users_table

编辑生成的迁移文件,添加一些字段:

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

运行迁移命令来创建表:

php artisan migrate

4. 创建控制器

生成一个 UserController 来处理用户的 CRUD 操作:

php artisan make:controller UserController

编辑生成的 UserController 文件,添加一些基本的路由和方法:

namespace AppHttpControllers;

use AppModelsUser;
use IlluminateHttpRequest;

class UserController extends Controller
{
    /**
     * Display a listing of users.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        $users = User::all();
        return view('users.index', ['users' => $users]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        return view('users.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param IlluminateHttpRequest $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        $user = User::create($request->all());
        return redirect()->route('users.index')->with('success', 'User created successfully.');
    }

    /**
     * Display the specified resource.
     *
     * @param int $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        $user = User::find($id);
        return view('users.show', ['user' => $user]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param int $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        $user = User::find($id);
        return view('users.edit', ['user' => $user]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param IlluminateHttpRequest $request
     * @param int $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        $user = User::find($id);
        $user->update($request->all());
        return redirect()->route('users.index')->with('success', 'User updated successfully.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param int $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        $user = User::find($id);
        $user->delete();
        return redirect()->route('users.index')->with('success', 'User deleted successfully.');
    }
}

5. 创建视图

创建相应的视图文件,例如 resources/views/users/index.blade.phpresources/views/users/create.blade.phpresources/views/users/edit.blade.php 等。

index.blade.php

@extends('layouts.app')

@section('content')
<h1>Users</h1>
<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach ($users as $user)
            <tr>
                <td>{{ $user->id }}</td>
                <td>{{ $user->name }}</td>
                <td>{{ $user->email }}</td>
                <td>
                    <a href="{{ route('users.show', $user->id) }}">Show</a> |
                    <a href="{{ route('users.edit', $user->id) }}">Edit</a> |
                    <form action="{{ route('users.destroy', $user->id) }}" method="POST">
                        @csrf
                        @method('DELETE')
                        <button type="submit">Delete</button>
                    </form>
                </td>
            </tr>
        @endforeach
    </tbody>
</table>
<a href="{{ route('users.create') }}">Create New User</a>
@endsection

create.blade.php

@extends('layouts.app')

@section('content')
<h1>Create User</h1>
<form action="{{ route('users.store') }}" method="POST">
    @csrf
    <div class="form-group">
        <label for="name">Name</label>
        <input type="text" id="name" name="name" required>
    </div>
    <div class="form-group">
        <label for="email">Email</label>
        <input type="email" id="email" name="email" required>
    </div>
    <button type="submit">Create User</button>
</form>
@endsection

edit.blade.php

@extends('layouts.app')

@section('content')
<h1>Edit User</h1>
<form action="{{ route('users.update', $user->id) }}" method="POST">
    @csrf
    @method('PUT')
    <div class="form-group">
        <label for="name">Name</label>
        <input type="text" id="name" name="name" value="{{ $user->name }}">
    </div>
    <div class="form-group">
        <label for="email">Email</label>
        <input type="email" id="email" name="email" value="{{ $user->email }}">
    </div>
    <button type="submit">Update User</button>
</form>
@endsection

6. 测试

现在你可以通过浏览器访问 http://localhost:8000/users 来测试用户管理功能。你可以创建、查看、编辑和删除用户。

希望这个示例能帮助你理解如何在 Laravel 中使用 Eloquent 进行增删改查操作。如果你有任何问题,请随时提问!

黑板Bug讲师

黑板Bug讲师

介绍

欢迎参加本Laravel Eloquent CRUD示例教程。在本指南中,我们将深入探讨如何使用Eloquent,Laravel的内置ORM(对象关系映射器),通过富文本和简洁的语法与数据库交互。我们将涵盖CRUD操作的基本功能,通过实际例子进行说明。

假设您对Laravel有基本的理解并且已经在系统上安装了它,让我们开始设置新项目或导航到现有项目的目录。

设置环境

$ composer create-project --prefer-dist laravel/laravel laravel-crud
$ cd laravel-crud

请确保您的数据库设置正确。.env文件。

创建一个模型

首先,我们需要一个模型来进行工作:

$ php artisan make:model Post -m

models.py. The -m flag also generates a database migration for our Post model. Let’s define some fields in the migration file located at models.py.database/migrations: 好的,请提供需要翻译的内容。

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('content');
        $table->timestamps();
    });
}

迁移数据库

在定义字段后,运行迁移:

$ php artisan migrate

创建(存储数据)

要创建一个新的帖子:

$post = new Post();
$post->title = 'Example Post Title';
$post->content = 'This is the content of the post.';
$post->save();

你可以通过在定义可填充属性之后调用创建方法来使用它:

protected $fillable = ['title', 'content'];

// ...later

Post::create([
    'title' => 'Example Post Title',
    'content' => 'Content of the post.'
]);

读取(检索数据)

要检索帖子,请查看相关选项或联系管理员获取帮助。

$posts = Post::all();

要获取单个帖子的ID:

$post = Post::find(1);

以条件为前提:

$post = Post::where('title', 'Example Post Title')->first();

更新(修改数据)

要更新一条帖子,请告诉我您想修改的内容以及想要发布的新信息。

$post = Post::find(1);
$post->title = 'Updated Title';
$post->content = 'Updated content of the post.';
$post->save();

删除(清除数据)

要删除一条帖子,请参阅以下步骤:

$post = Post::find(1);
$post->delete();

对于批量删除:

Post::destroy([1,2,3]);

使用资源控制器进行CRUD操作

可以通过生成资源控制器来简化这个过程:

$ php artisan make:controller PostController --resource

这会生成一个预填充的控制器,其中包含映射到基本CRUD操作的方法。然后你可以在此方法内部定义逻辑,并创建路由来处理每个动作:

Route::resource('posts', 'PostController');

在PostController内部,你需要实现一些方法。index()好的,请提供需要翻译的内容。create()好的,请发送你需要翻译的内容。store()好的,请提供需要翻译的内容。show()好的,请发送你需要翻译的内容。edit()好的,请提供需要翻译的内容。update()和你有什么事吗?destroy()好的,请提供需要翻译的内容。

最佳实践和优雅的关系模式

Eloquent also provides clean methods for defining relationships likehasOne好的,请发送你需要翻译的内容。belongsTo好的,请发送你需要翻译的内容。hasMany和我有什么事吗?belongsToMany建立适当的关系可以促进与数据更直观和简洁的交互。

请参阅:

在Laravel Eloquent中使用INNER JOIN的语法如下: $users = User::join(‘orders’, ‘users.id’, ‘=’, ‘orders.user_id’) ->select(‘users.*’) ->get(); 这段代码会从数据库表users和orders中获取关联,只返回那些在两个表中都存在的用户记录。

在Laravel的Eloquent模型中使用LEFT JOIN可以通过以下方式实现: $users = User::leftJoin(‘orders’, ‘users.id’, ‘=’, ‘orders.user_id’)->get(); 这个查询会返回所有用户及其关联的订单,即使某些用户没有对应的订单。如果需要只返回有订单的用户,可以添加条件: $usersWithOrders = User::leftJoin(‘orders’, ‘users.id’, ‘=’, ‘orders.user_id’) ->whereHas(‘orders’, function ($query) { $query->whereNotNull(‘id’); }) ->get(); 这样只会返回那些至少有一个订单的用户。

在Laravel Eloquent中使用RIGHT JOIN的情况如下: 查询多个表的数据:当需要从一个或多个表中获取数据时,可以使用LEFT JOIN或RIGHT JOIN。 条件查询:如果要根据某个字段进行过滤,则可以使用WHERE子句来实现。 排序和分页:可以对查询结果进行排序和分页操作。 返回关联记录:可以通过with()方法设置关联关系并返回关联记录。 自连接:通过在主表和子表之间添加JOIN关键字,可以实现自连接操作。 复合查询:可以结合多种条件和子查询来进行复杂的查询。 以下是一些基本的用法示例: // 从users表和posts表中获取用户的信息以及他们发布的所有帖子 $users = User::join(‘posts’, ‘users.id’, ‘=’, ‘posts.user_id’) ->select(‘users.*’, ‘posts.title as post_title’) // 可以选择特定的列 ->get(); foreach ($users as $user) { echo “User ID: {$user->id}, Username: {$user->username}, Posts: “; foreach ($user->post_title as $title) { echo “{$title}, “; } echo “n”; } 希望这些信息对你有帮助!如果你有任何具体问题,请随时提问。

在Eloquent ORM(对象关系映射)中使用多对多关系(many-to-many relationships)的示例。

在Eloquent框架中处理一对一和多对一关系(示例)

结论。

到目前为止,你应该已经对使用Laravel Eloquent进行基本的CRUD操作有了很好的理解。虽然这只是开始,但Laravel和Eloquent提供了丰富的功能,帮助你优雅地与数据库交互,提高应用的生产力和可维护性。继续实验,并记住在需要更复杂解决方案或额外帮助时,请参阅Laravel文档。

长工码奴1523

长工码奴1523

Eloquent 是 Laravel 的 ORM(对象关系映射)库,它提供了对数据库的便捷操作。下面我们将通过几个例子来展示如何使用 Eloquent 实现增删改查的操作。

假设我们有一个模型名为 User,其中包含以下字段:

public $timestamps = true;
protected $fillable = ['name', 'email'];

要添加一个新的用户,可以这样做:

$user = new User([
    'name' => 'John Doe',
    'email' => 'johndoe@example.com'
]);

$user->save();

这将创建一个新用户并将其存储到数据库中。

删除用户可以通过调用用户的 ID 来实现:

$userId = 1; // 假设这是一个有效的用户ID
$user = User::find($userId);
if ($user) {
    $user->delete();
}

如果找到用户且其存在,则执行删除操作。

更新用户信息:

$userId = 2; // 假设这是另一个有效的用户ID
$user = User::find($userId);

// 更新用户信息
$user->update(['email' => 'new.email@example.com']);

// 或者通过验证器
$user->validate(['email' => 'required|email']);
$user->email = 'new.email@example.com';
$user->save();

查询所有用户:

$users = User::all();

foreach ($users as $user) {
    echo $user->id . "n";
}

// 这里你可以根据需要查询其他属性
echo $users[0]->name . "n";

这些是基本的 Eloquent 操作。Laravel 的文档非常详细,提供了许多更复杂的查询和验证方法,例如模糊匹配、排序等。如果你有任何具体问题,请随时提问!