App下載

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

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

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

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

學習時間

首先創(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列,一個是主鍵,一個是標題,一個是文本內容。注意數(shù)據(jù)庫字段,表,均聲明了utf-8編碼。

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

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

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

然后重點來了,視圖內這樣寫大家看會不會有問題???

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


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

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

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

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

正確寫法

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

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

EloquentCollection 內的每一個元素,都是一個 About Model 對象。所以可以使用 $object->title 獲取到title屬性。

如果你的需求很簡單,就是要第一個元素的標題,簡寫如下:

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

如果你要獲取集合內的第一個元素,使用 first 方法:

{{ $collection->first() }}

深入一步

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

都會返回一個 About Model 對象,在視圖中就可以愉快地寫:

{{ $object->title }}

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

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

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

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

PHP

0 人點贊