laravel学习笔记--模型注入

路由与模型绑定

当向路由或控制器方法注入模型 ID 时,您可能总是会检索该 ID 与模型是否一致。Laravel
路由模型绑定提供了一个方便的方案,它可以自动注入模型实例到路由中。例如,您可以注入与给定 ID 匹配的整个 User
模型实例,而不是注入用户的 ID

隐式绑定

Laravel 会自动处理在路由或控制器方法中,与类型提示的变量名相匹配的路由段名称的的 Eloquent 模型

Route::get('users/{user}', function (App\Models\User $user) {
    dd($user);
});

就是说,
由于$user变量是模型中的user,也就是数据库模型,
变量{user}又与模型中的$user对应,
其实,变量{user}是id,是模型id,
laravel会根据传入的id去查询模型中有没有这个数据,
如果没有这个数据,就会返回404

如:如果传递的id在模型中是存在的
在这里插入图片描述

如果id在模型中不存在,就会报404
在这里插入图片描述
当然,默认是以id作为传递键的,如果想要自定义键名也是可以的
比如这个,是以邮箱为键名,传递的就要邮箱了,会根据邮箱去模型中查找

Route::get('users/{user:email}', function (App\Models\User $user) {
    dd($user);
});

上面说到的是在定义路由的时候就定义的,也可以去模型中定义键名

如果希望模型绑定在检索给定的模型类时,默认使用的是 id 以外的数据库字段,则可以重写 Eloquent 模型上的 getRouteKeyName 方法

/**
 * 获取该模型的路由的自定义键名
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'email';//以id为键名
}

例如,一个完整使用模型注入的例子

第一步,在控制器中传入模型,这个会根据路由传递的id值去查找书籍

public function edit(Blog $blog)
    {
        return view('blog.edit',['blog'=>$blog]);
        //传递参数到视图中,视图就可以使用这个变量了
    }

第二步,在视图中使用它
因为在控制器中传递了一个变量到视图中,所以,,是可以使用这个变量的

<input type="text" class="form-control" 
value="{{$blog->title}}" id="exampleFormControlInput1">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值