📜  如何将参数传递给关系 laravel - PHP (1)

📅  最后修改于: 2023-12-03 14:53:03.495000             🧑  作者: Mango

如何将参数传递给关系 Laravel

在Laravel中,可以使用Eloquent ORM轻松管理关系数据库。在开发应用程序时,经常需要传递参数来操作关系数据库。本指南将向您展示如何使用Laravel将参数传递给关系数据库,实现数据的增删改查。

创建关系数据库

在这里,我们将假设您已经熟悉Laravel的Eloquent ORM。如果您需要更多关于Eloquent ORM的信息,您可以参考Laravel官方文档

首先,我们需要创建一个关系数据库。我们可以使用迁移来创建一个新的表和模型,并通过控制器来操作模型。

  1. 创建一个包含所需字段的迁移文件:
Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->string('phone_number')->nullable();
    $table->string('password');
    $table->timestamp('email_verified_at')->nullable();
    $table->rememberToken();
    $table->timestamps();
});
  1. 创建一个与User表相关联的User模型:
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'phone_number',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}
  1. 创建UserController类来处理请求:
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = User::all();
        return view('users.index', compact('users'));
    }

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

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'phone_number' => 'nullable|digits_between:10,14',
            'password' => 'required|confirmed',
        ]);

        return redirect()->route('users.index')->with('success', 'User created successfully.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        return view('users.show', compact('user'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function edit(User $user)
    {
        return view('users.edit', compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, User $user)
    {
        $validated = $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users,email,'.$user->id,
            'phone_number' => 'nullable|digits_between:10,14',
        ]);

        $user->name = $validated['name'];
        $user->email = $validated['email'];
        $user->phone_number = $validated['phone_number'];

        $user->save();

        return redirect()->route('users.index')->with('success', 'User updated successfully.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        $user->delete();

        return redirect()->route('users.index')->with('success', 'User deleted successfully.');
    }
}
传递参数

我们已经创建了一个关系数据库,并设置了相应的控制器来处理我们的请求。现在,我们需要传递参数到控制器中来操作数据。其中,传递参数的方法包括:

路由参数

通过路由参数,我们可以轻松地将参数传递到控制器中。例如,要获取给定ID的用户信息,我们可以使用以下路由:

Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show');

在这里,我们将用户ID作为路由参数传递到UserController的show方法中。在控制器中,我们可以使用该ID来获取用户信息:

public function show(User $user)
{
    return view('users.show', compact('user'));
}
查询字符串参数

通过查询字符串参数,我们可以将附加的参数传递到控制器中。例如,要搜索用户列表,并显示与查询字符串匹配的结果,我们可以使用以下路由:

Route::get('/users', [UserController::class, 'index'])->name('users.index');

在控制器中,我们可以使用以下代码获取查询字符串:

public function index(Request $request)
{
    $search = $request->input('search');
    $users = User::where('name', 'like', '%'.$search.'%')->get();
    return view('users.index', compact('users', 'search'));
}

在上面的示例中,我们可以使用$request->input('search')获取查询字符串。然后,我们可以使用查询字符串来过滤查找的User数据。

表单参数

表单参数是通过HTTP表单提交的参数。例如,当我们创建新的用户时,我们需要将表单数据传递到UserController:

Route::post('/users', [UserController::class, 'store'])->name('users.store');

在表单提交后,我们可以使用以下代码在UserController中获取表单参数:

public function store(Request $request)
{
    $validated = $request->validate([
        'name' => 'required',
        'email' => 'required|email|unique:users',
        'phone_number' => 'nullable|digits_between:10,14',
        'password' => 'required|confirmed',
    ]);

    // Use validated data to save new user

    return redirect()->route('users.index')->with('success', 'User created successfully.');
}

在上面的示例中,我们使用$request->validate()方法来验证表单数据。然后,我们使用该数据创建新的User对象,并将其保存到数据库中。

结论

在本指南中,我们介绍了如何使用路由参数,查询字符串参数和表单参数将参数传递到Laravel关系数据库中。以上是一个简单的示例,您可以根据实际应用情况使用更多的参数传递方式,以实现更多功能。