App下載

三分鐘帶你了解Laravel 模型的get find first用法

猿友 2020-07-31 10:32:10 瀏覽數(shù) (3518)
反饋

首先我們來了解一下Laravel 模型,Laravel中是有兩種集合,一個(gè)是 BaseCollection,一個(gè)是 EloquentCollection。后者繼承前者,而且對(duì)部分方法進(jìn)行了重載。分清楚之間的細(xì)微區(qū)別,可以讓你在編程中不迷惑。

本文從一整套的例子,從數(shù)據(jù)庫建表,寫模型,寫控制器,到模板渲染,從一個(gè)小bug,講到集合的深層次原因。

學(xué)習(xí)時(shí)間

首先創(chuàng)建數(shù)據(jù)庫表,我們不使用遷移,直接上SQL。

CREATE TABLE `about`(
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci,
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

只有3列,一個(gè)是主鍵,一個(gè)是標(biāo)題,一個(gè)是文本內(nèi)容。注意數(shù)據(jù)庫字段,表,均聲明了utf-8編碼。

然后創(chuàng)建模型 About,指定表名,我們此處略去,直接看控制器的一個(gè)方法:

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

SQL查詢條件是根據(jù)標(biāo)題返回所有的條目,然后將結(jié)果集通過 view 視圖進(jìn)行渲染。

然后重點(diǎn)來了,視圖內(nèi)這樣寫大家看會(huì)不會(huì)有問題???

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


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

如果不出意外,開啟 debug = true 訪問該頁面時(shí),你大概率會(huì)得到下面的錯(cuò)誤提示:

Property [title] does not exist on this collection instance. 
(View: E:\laragon\www\newsite\resources\views\about.blade.php)

大家思考一下,這個(gè)故障是如何發(fā)生的?下一節(jié)我們給出解答。

正確寫法

Laravel模型的get() 方法返回一個(gè)集合(EloquentCollection)。如果需要使用集合的屬性,你首先需要進(jìn)行遍歷。像下面這樣在視圖文件內(nèi)寫:

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

EloquentCollection 內(nèi)的每一個(gè)元素,都是一個(gè) About Model 對(duì)象。所以可以使用 $object->title 獲取到title屬性。

如果你的需求很簡(jiǎn)單,就是要第一個(gè)元素的標(biāo)題,簡(jiǎn)寫如下:

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

如果你要獲取集合內(nèi)的第一個(gè)元素,使用 first 方法:

{{ $collection->first() }}

深入一步

我們知道了問題來自 get() 方法,那么,如果要獲取查詢數(shù)據(jù)集的第一條數(shù)據(jù),應(yīng)該用哪個(gè)呢?find()或者first()

都會(huì)返回一個(gè) About Model 對(duì)象,在視圖中就可以愉快地寫:

{{ $object->title }}

本文通過實(shí)際的例子,講解了laravel模型中查詢數(shù)據(jù)結(jié)果集的 find get first 的細(xì)微區(qū)別,希望能對(duì)大家有所幫助。想了解更多的同學(xué)可以看一下教程

Laravel 5中文文檔:http://www.o2fo.com/qpmsiw/

Laravel入門到實(shí)戰(zhàn):http://www.o2fo.com/minicourse/play/laravelpre

文章參考來源:www.toutiao.com/a6855259233106002440/

PHP

0 人點(diǎn)贊