Laravel學習-資料庫操作和查詢建構器的範例程式碼分享

黄舟
發布: 2023-03-06 19:36:02
原創
1499 人瀏覽過


最近小編在學習號稱世界最牛框架–Laravel。其實學習框架也就是學習框架的想法! 我想在我的部落格中記錄我在laravel學習中的一些心得,歡迎大家關注我的其他Github部落格和簡書,互相交流!

版本:Laravel 5.2
 資料庫:mysql 5.7
php:php7.1

資料庫操作查詢建構器

在Laravel中執行資料庫操作有兩種方式,一種是使用\DB外觀物件的靜態方法直接執行sql查詢,另一個是使用Model類別的靜態方法(實際上也是Facade的實現,使用靜態存取方式存取Model的方法,內部採用了callStatic魔術方法代理了對成員方法的存取。數組,數組中每一個值為一個

StdClass

物件。的資料列

#
$results = DB::select('select * from users where id = ?', [1]);foreach ($results as $res) {    echo $res->name;
}
登入後複製

從表中查詢單行/列

使用first方法傳回單行數據,該方法傳回的是一個stdClass物件<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">$results = DB::select(&amp;#39;select * from users where id = :id&amp;#39;, [&amp;#39;id&amp;#39; =&gt; 1]);</pre><div class="contentsignin">登入後複製</div></div>如果只需要一列的值,則可以使用value方法直接獲取單列的值

$users = DB::table(&#39;users&#39;)->get();

foreach ($users as $user)
{
    var_dump($user->name);
}
登入後複製

從資料表中分塊查找資料列

該方法用於資料表中有大量的資料的操作,每次從結果集中取出一部分,使用閉包函數進行處理,然後再處理下一部分,該命令一般用於Artisan命令列程式中處理大量資料。 ##false

,則會停止後續的處理。

欄位值

$user = DB::table(&#39;users&#39;)->where(&#39;name&#39;, &#39;John&#39;)->first();
echo $user->name;
登入後複製

這裡的

pluck

函數有兩個參數

$email = DB::table(&#39;users&#39;)->where(&#39;name&#39;, &#39;John&#39;)->value(&#39;email&#39;);
登入後複製

第一個參數為要查詢的列,第二個參數是每一列的key

DB::table(&#39;users&#39;)->chunk(100, function($users){
    foreach ($users as $user)
    {        //
    }
});
登入後複製

聚合函數

查詢建構器也提供了一些聚集函數如count,max,min,avg,sum

$titles = DB::table(&#39;roles&#39;)->pluck(&#39;title&#39;);foreach ($titles as $title) {    echo $title;
}
登入後複製

指定select查詢條件

查詢指定的列#

Collection pluck( string $column, string|null $key = null)
登入後複製

如果已經指定了select,但是又希望再次添加一些字段,使用它addSelect方法

$roles = DB::table(&#39;roles&#39;)->pluck(&#39;title&#39;, &#39;name&#39;);foreach ($roles as $name => $title) {    echo $title;
}
登入後複製
查詢不同的結果distinct#
$users = DB::table(&#39;users&#39;)->count();
$price = DB::table(&#39;orders&#39;)->max(&#39;price&#39;);
$price = DB::table(&#39;orders&#39;)->where(&#39;finalized&#39;, 1)->avg(&#39;price&#39;);
登入後複製

使用原生

表達式

#使用

DB::raw方法可以將所需的sql片段,但是非常不建議使用該方法,用不好會產生sql注入

$users = DB::table(&#39;users&#39;)->select(&#39;name&#39;, &#39;email as user_email&#39;)->get();
登入後複製

Join操作

#內連接Inner Join

#使用join執行內連接操作,該函數第一個參數為要連接的表名,其它參數指定了連接約束

$query = DB::table(&#39;users&#39;)->select(&#39;name&#39;);$users = $query->addSelect(&#39;age&#39;)->get();
登入後複製

左連接Left Join

#使用leftJoin方法執行左連接操作,參數和join一樣$users =

$users = DB::table(&#39;users&#39;)->distinct()->get();
登入後複製

高級Join方法#如果join方法的約束條件比較複雜,可以使用閉包函數的方式指定

$users = DB::table(&#39;users&#39;)
      ->select(DB::raw(&#39;count(*) as user_count, status&#39;))
      ->where(&#39;status&#39;, &#39;<>&#39;, 1)
      ->groupBy(&#39;status&#39;)
      ->get();
登入後複製

如果join約束中要使用列值與指定數組比較,則可以使用where和OrWhere方法<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">$users = DB::table(&amp;#39;users&amp;#39;) -&gt;join(&amp;#39;contacts&amp;#39;, &amp;#39;users.id&amp;#39;, &amp;#39;=&amp;#39;, &amp;#39;contacts.user_id&amp;#39;) -&gt;join(&amp;#39;orders&amp;#39;, &amp;#39;users.id&amp;#39;, &amp;#39;=&amp;#39;, &amp;#39;orders.user_id&amp;#39;) -&gt;select(&amp;#39;users.*&amp;#39;, &amp;#39;contacts.phone&amp;#39;, &amp;#39;orders.price&amp;#39;) -&gt;get();</pre><div class="contentsignin">登入後複製</div></div>Union操作

要使用union操作,可以先建立一個query,然後再使用union方法去綁定第二個query

DB::table(&#39;users&#39;)
  ->leftJoin(&#39;posts&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;posts.user_id&#39;)
  ->get();
登入後複製

同樣,

unionAll

方法也是可以使用的,參數與union相同。

Where查詢條件

簡單的wehere條件

#使用where方法為查詢增加where條件,函數一般需要三個參數:列名,運算子(任何資料庫支援的操作符都可以),列值。

<p style="margin-top: 7px;">DB::table(&#39;users&#39;)<br/>   ->join(&#39;contacts&#39;, function ($join) {<br/>       $join->on(&#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)->orOn(...);<br/>   })<br/>   ->get();<br/></p>
登入後複製

以上是Laravel學習-資料庫操作和查詢建構器的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板