📅  最后修改于: 2023-12-03 14:53:03.495000             🧑  作者: Mango
在Laravel中,可以使用Eloquent ORM轻松管理关系数据库。在开发应用程序时,经常需要传递参数来操作关系数据库。本指南将向您展示如何使用Laravel将参数传递给关系数据库,实现数据的增删改查。
在这里,我们将假设您已经熟悉Laravel的Eloquent ORM。如果您需要更多关于Eloquent ORM的信息,您可以参考Laravel官方文档。
首先,我们需要创建一个关系数据库。我们可以使用迁移来创建一个新的表和模型,并通过控制器来操作模型。
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();
});
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',
];
}
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关系数据库中。以上是一个简单的示例,您可以根据实际应用情况使用更多的参数传递方式,以实现更多功能。