如果用的不是 Eloquent 模型,而是查询构造器如何进行更新处理

如果不是使用模型,而是查询构造器。
不使用model进行调用
方法里如何进行数值的定义和传递

public function show(User $user)
{
    return view('users.show', compact('user'));
}

User $user这里还不是很懂 第一个User代表的是什么, $user是什么?

⬇︎第一次零基础搭建的个人博客。欢迎批评指正,大力鞭策!❤︎ 旺财的个人博客(⌯¤̴̶̷̀ω¤̴̶̷́)✧ January 17th, 2020
chihokyo
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

函数里面传入一个类的实例,这是PHP的类型约束( Type Hinting )
function show(User $user) { \\ } 表示传入的参数必须是一个User类的实例。
那么,这里是如何获得User类的实例$user的呢?这就要用到Laravel的依赖注入机制了,Laravel会自动帮你生成该类的实例,你是不用管的,直接写到参数里就是了(注意引入的类的命名空间要正确)。

如果不使用模型,这个函数可以这样改写:

 public function show($user_id = '')
    {
        $user = Db::table('users')->where('id', $user_id)->first();
        return view('users.show',compact('user'));
    }

上面的方法将请求参数绑定到show函数,这样可以自动获得$user_id,如访问http://your-domain-name.test/users/2,则获得$user_id=2。不过想要获得该ID的用户信息,还得使用Db类查一遍数据库。使用Db类时,注意引入它的命名空间,语句:use Illuminate\Support\Facades\DB;

还有另一写法是:

 public function show(Request $request)
    {
        $user_id = $request->user;
        $user = Db::table('users')->where('id', $user_id)->first();
        return view('users.show',compact('user'));
    }

相比之下,还是使用User类的实例(模型)作为参数比较方便。

5年前 评论
讨论数量: 8

函数里面传入一个类的实例,这是PHP的类型约束( Type Hinting )
function show(User $user) { \\ } 表示传入的参数必须是一个User类的实例。
那么,这里是如何获得User类的实例$user的呢?这就要用到Laravel的依赖注入机制了,Laravel会自动帮你生成该类的实例,你是不用管的,直接写到参数里就是了(注意引入的类的命名空间要正确)。

如果不使用模型,这个函数可以这样改写:

 public function show($user_id = '')
    {
        $user = Db::table('users')->where('id', $user_id)->first();
        return view('users.show',compact('user'));
    }

上面的方法将请求参数绑定到show函数,这样可以自动获得$user_id,如访问http://your-domain-name.test/users/2,则获得$user_id=2。不过想要获得该ID的用户信息,还得使用Db类查一遍数据库。使用Db类时,注意引入它的命名空间,语句:use Illuminate\Support\Facades\DB;

还有另一写法是:

 public function show(Request $request)
    {
        $user_id = $request->user;
        $user = Db::table('users')->where('id', $user_id)->first();
        return view('users.show',compact('user'));
    }

相比之下,还是使用User类的实例(模型)作为参数比较方便。

5年前 评论

第一个是数据数组,要求是一个User模型
第二个是$user 是按你传值的 id 查询出来的一个User模型
相当于执行 User::find($id)

5年前 评论
chihokyo

@158abcd1510 您好 谢谢您及时的回复和赐教
根据您所说的意思就是,
1 前面是个数据数组。调用的是和名字一样的模型,也就是在model里面的user.php这个模型(我可以理解成是调用里面的user类吗) 也就是说这个时候user.php是固定住的,改了个名字比如是【adminuser】,第一个参数也要修改,是这个意思吗?
2 后面一个,调用的是模型类的一个属性,也就是
protected $table = 'users';
而laravel特性会自动在protected $table = 'users';找到这个数据表的主键ID,如果主键不是叫ID,而是叫userid是不是就不能按照上面那个方法写了呢?

5年前 评论

file
你可以看一下show方法的路由,从路由上说,它希望你是传一个模型的主键过来,它按这个主键给你查询出一个记录
如果按这个主键把不到记录的话,一般会返回一个404错误

5年前 评论
chihokyo

@tsin 谢谢您详细严谨的答复
目前还没有完全消化完,但会仔细看一下。因为按照教程走的话,有时候遇到的情况不太一样。
比如这次的有个项目是要求所有关于数据库的文件都新建一个app/services/数据库文件
从这个文件里调用,所以我才提问了。
没有想到类型约束的问题

这样一想的话,感觉教程的解释就没有您这么透彻了。谢谢回复了。

5年前 评论

@chihokyo 不客气。还是要多查文档:PHP官方文档、Laravel官方文档,教程不可能面面俱到的。

5年前 评论

@tsin 那如果是post方式呢
[
public function modify(Agent $agent){
var_dump($agent);
}
]
这样$agent 会返回什么?

5年前 评论

@zhaozhenghong 会得到Agent的一个Eloquent模型实例,你可以对该实例进行各字段的赋值,保存、删除模型等操作。如:

//假设Agent模型有content、user_id字段
$agent->content = $request->content;
$agent->user_id = Auth::id();
$agent->save();
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!