laravel debug true 无效_3分钟短文 | Laravel 模型的get find first方法你分清咋用了吗?...

引言

上一篇我们说到了Laravel中是有两种集合,一个是 BaseCollection,一个是 EloquentCollection。后者继承前者,而且对部分方法进行了重载。分清楚之间的细微区别,可以让你在编程中不迷惑。

18bae5c230c491cd2f4e4959a0fb72b2.png

本文从一整套的例子,从数据库建表,写模型,写控制器,到模板渲染,从一个小bug,讲到集合的深层次原因。

学习时间

首先创建数据库表,我们不使用迁移,直接上SQL。

8ecd330e52f1c92d804067a76a6045a8.png

只有3列,一个是主键,一个是标题,一个是文本内容。注意数据库字段,表,均声明了utf-8编码。

然后创建模型 About,指定表名,我们此处略去,直接看控制器的一个方法:

public function index(){    $about = About::where('title', 'about-me')->get(); //id = 3    return view('about', compact('about'));}

SQL查询条件是根据标题返回所有的条目,然后将结果集通过 view 视图进行渲染。

然后重点来了,视图内这样写大家看会不会有问题!?

@section('title')    {{$about->title}}@stop@section('content')    {!! $about->content !!}@stop 

如果不出意外,开启 debug = true 访问该页面时,你大概率会得到下面的错误提示:

Property [title] does not exist on this collection instance. (View: E:laragonwwwewsiteesourcesviewsabout.blade.php)

大家思考一下,这个故障是如何发生的?下一节我们给出解答。

正确写法

Laravel模型的get() 方法返回一个集合(EloquentCollection)。如果需要使用集合的属性,你首先需要进行遍历。像下面这样在视图文件内写:

@foreach ($collection as $object)    {{ $object->title }}@endforeach 

EloquentCollection 内的每一个元素,都是一个 About Model 对象。所以可以使用 $object->title 获取到title属性。

如果你的需求很简单,就是要第一个元素的标题,简写如下:

{{ $collection[0]->title }}

如果你要获取集合内的第一个元素,使用 first 方法:

{{ $collection->first() }}

深入一步

我们知道了问题来自 get() 方法,那么,如果要获取查询数据集的第一条数据,应该用哪个呢?find()或者first() !

都会返回一个 About Model 对象,在视图中就可以愉快地写:

{{ $object->title }}

写在最后

本文通过实际的例子,讲解了laravel模型中查询数据结果集的 find get first 的细微区别,希望大家可以熟练掌握。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值