目次
查询操作
从表中查询单行/列
从数据表中分块查找数据列
聚合函数
指定select查询条件
Join操作
Union操作
ホームページ バックエンド開発 PHPチュートリアル Laravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有

Laravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有

Mar 21, 2017 am 09:25 AM


最近、編集者は世界最高のフレームワークとして知られるLaravelを勉強しています。実はラーニングフレームワークも学習フレームワークの考え方なのです! Laravel の学習に関する私の経験をブログに記録したいと思います。他の Github ブログや短い本をフォローして、相互にコミュニケーションすることを歓迎します。

バージョン: Laravel 5.2
データベース: mysql 5.7
php: php7.1

データベース操作 クエリ コンストラクター

Laravel でデータベース操作を実行するには 2 つの方法があります。1 つは、DB の静的メソッドを使用して直接実行する方法です。もう 1 つは、Model クラスの静的メソッドを使用する方法です (実際には Facade の実装でもあり、静的アクセス メソッドを使用して Model メソッドにアクセスし、内部では callStatic マジック メソッドを使用してメンバー メソッドへのアクセスをプロキシします。DB外观对象的静态方法直接执行sql查询,另外一种是使用Model类的静态方法(实际上也是Facade的实现,使用静态访问方式访问Model的方法,内部采用了callStatic魔术方法代理了对成员方法的访问。

查询操作

使用sql语句执行select查询操作#

$results = DB::select('select * from users where id = ?', [1]);foreach ($results as $res) {    echo $res->name;
}
ログイン後にコピー

返回结果为数组,数组中每一个值为一个StdClass对象。
也可以使用命名绑定,推荐使用这种方式,更加清晰一些

$results = DB::select('select * from users where id = :id', ['id' => 1]);
ログイン後にコピー

从数据表中取得所有的数据列#

$users = DB::table('users')->get();

foreach ($users as $user)
{
    var_dump($user->name);
}
ログイン後にコピー

从表中查询单行/列

使用first方法返回单行数据,该方法返回的是一个stdClass对象

$user = DB::table('users')->where('name', 'John')->first();
echo $user->name;
ログイン後にコピー

如果只需要一列的值,则可以使用value方法直接获取单列的值

$email = DB::table('users')->where('name', 'John')->value('email');
ログイン後にコピー

从数据表中分块查找数据列

该方法用于数据表中有大量的数据的操作,每次从结果集中取出一部分,使用闭包函数进行处理,然后再处理下一部分,该命令一般用于Artisan命令行程序中处理大量数据。

DB::table('users')->chunk(100, function($users){
    foreach ($users as $user)
    {        //
    }
});
ログイン後にコピー

在闭包函数中,如果返回false,则会停止后续的处理。

从数据表中查询某一列的列表#

比如我们希望查询出角色表中所有的title字段值

$titles = DB::table('roles')->pluck('title');foreach ($titles as $title) {    echo $title;
}
ログイン後にコピー

这里的pluck函数有两个参数

Collection pluck( string $column, string|null $key = null)
ログイン後にコピー

第一个参数为要查询的列,第二个参数是每一列的key

$roles = DB::table('roles')->pluck('title', 'name');foreach ($roles as $name => $title) {    echo $title;
}
ログイン後にコピー

聚合函数

查询构造器也提供了一些聚集函数如count,max,min,avg,sum

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')->where('finalized', 1)->avg('price');
ログイン後にコピー

指定select查询条件

查询指定的列#

$users = DB::table('users')->select('name', 'email as user_email')->get();
ログイン後にコピー

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

$query = DB::table('users')->select('name');$users = $query->addSelect('age')->get();
ログイン後にコピー

查询不同的结果distinct#

$users = DB::table('users')->distinct()->get();
ログイン後にコピー

使用原生表达式#

使用DB::raw方法可以向查询中注入需要的sql片段,但是非常不推荐使用该方法,用不好会 产生sql注入

$users = DB::table('users')
      ->select(DB::raw('count(*) as user_count, status'))
      ->where(&#39;status&#39;, &#39;<>&#39;, 1)
      ->groupBy(&#39;status&#39;)
      ->get();
ログイン後にコピー

Join操作

内连接 Inner Join#

使用join执行内连接操作,该函数第一个参数为要连接的表名,其它参数指定了连接约束

$users = DB::table(&#39;users&#39;)
  ->join(&#39;contacts&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)
  ->join(&#39;orders&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;orders.user_id&#39;)
  ->select(&#39;users.*&#39;, &#39;contacts.phone&#39;, &#39;orders.price&#39;)
  ->get();
ログイン後にコピー

左连接 Left Join#
使用leftJoin方法执行左连接操作,参数和join一样$users =

DB::table(&#39;users&#39;)
  ->leftJoin(&#39;posts&#39;, &#39;users.id&#39;, &#39;=&#39;, &#39;posts.user_id&#39;)
  ->get();
ログイン後にコピー

高级Join方法#

如果join方法的约束条件比较复杂,可以使用闭包函数的方式指定

<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>
ログイン後にコピー

如果join约束中要使用列值与指定数组比较,则可以使用where和OrWhere方法

DB::table(&#39;users&#39;)  
->join(&#39;contacts&#39;, function ($join) {       
$join->on(&#39;users.id&#39;, &#39;=&#39;, &#39;contacts.user_id&#39;)            
->where(&#39;contacts.user_id&#39;, &#39;>&#39;, 5);
   })   ->get();
ログイン後にコピー

Union操作

要使用union操作,可以先创建一个query,然后再使用union方法去绑定第二个query

$first = DB::table(&#39;users&#39;)
            ->whereNull(&#39;first_name&#39;);
$users = DB::table(&#39;users&#39;)
            ->whereNull(&#39;last_name&#39;)
            ->union($first)
            ->get();
ログイン後にコピー

同样,unionAll

クエリ操作

SQL ステートメントを使用して選択クエリ操作を実行します#

$users = DB::table(&#39;users&#39;)->where(&#39;votes&#39;, &#39;=&#39;, 100)->get();
$users = DB::table(&#39;users&#39;)->where(&#39;votes&#39;, 100)->get();
ログイン後にコピー
返される結果は配列であり、配列内の各値は StdClass オブジェクトです。

名前付きバインディングを使用することもできます。この方法がより明確です

rrreee🎜データ テーブルからすべてのデータ列を取得します#🎜rrreee🎜テーブルから単一の行/列をクエリします🎜🎜最初のメソッドを使用して返します。 stdClass オブジェクトを返すデータの単一行🎜rrreee🎜 1 つの列の値のみが必要な場合は、value メソッドを使用して単一列の値を直接取得できます🎜rrreee🎜データテーブル🎜🎜このメソッドは、データテーブル内の大量のデータに対する操作に使用され、そのたびに結果セットから一部を取り出し、クロージャ関数を使用してそれを処理し、次の部分を処理します。 🎜rrreee🎜クロージャー関数でfalseが返された場合、🎜🎜クエリのリストを処理するためにArtisanコマンドラインプログラムで使用されます。データ テーブルの特定の列#🎜🎜たとえば、文字テーブル内のすべての title フィールド値をクエリしたいとします🎜rrreee🎜pluck here 関数パラメータは 2 つあります🎜rrreee🎜最初のパラメータはクエリ対象の列で、2 番目のパラメータは各列のキーです🎜rrreee🎜集計関数🎜🎜クエリ コンストラクターには、count、max、 min、avg、sum など🎜rrreee🎜select クエリ条件を指定します🎜🎜指定された列をクエリします #🎜rrreee🎜 select を指定したが、いくつかのフィールドを再度追加したい場合は、その addSelect メソッドを使用します 🎜rrreee🎜異なる結果をクエリします。distinct#🎜rrreee🎜ネイティブの 式を使用します🎜#🎜🎜DB:: raw メソッドは必要な SQL フラグメントをクエリに挿入できますが、このメソッドの使用は推奨されません。適切に使用しないと SQL インジェクションが発生します🎜rrreee🎜Join 操作🎜🎜Inner Join#🎜🎜を使用します。 join は内部結合操作を実行します。他のパラメーターは接続制約を指定します🎜rrreee🎜LeftJoin# 🎜左結合操作を実行するには、leftJoin メソッドを使用します。 join と同じです $users =🎜 rrreee🎜高度な結合メソッド#🎜🎜結合メソッドの制約がより複雑な場合は、クロージャー関数を使用してそれらを指定できます🎜rrreee🎜結合制約を使用して指定された配列と比較するには、where メソッドと OrWhere メソッドを使用できます🎜rrreee 🎜Union 操作🎜🎜 Union 操作を使用するには、まずクエリを作成し、次に Union メソッドを使用して 2 番目のクエリをバインドできます🎜rrreee🎜同様に、unionAll メソッドも使用でき、パラメータは Union と同じです。 🎜🎜Where クエリ条件🎜🎜単純な where 条件#🎜🎜where メソッドを使用してクエリに where 条件を追加するには、通常、この関数には 3 つのパラメータが必要です: 列名、演算子 (データベースでサポートされている任意の演算子)、および列の値。 。 🎜りー

以上がLaravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Apr 01, 2025 pm 02:45 PM

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...

Laravelスケジュールタスクは実行されません:スケジュール:実行コマンドの後にタスクが実行されていない場合はどうすればよいですか? Laravelスケジュールタスクは実行されません:スケジュール:実行コマンドの後にタスクが実行されていない場合はどうすればよいですか? Mar 31, 2025 pm 11:24 PM

LaravelスケジュールタスクRAN RANSPONSIVEトラブルシューティングRALAVELのスケジュールタスクスケジューリングを使用すると、多くの開発者がこの問題に遭遇します。スケジュール:実行...

Laravelでは、検証コードが電子メールで送信できない状況に対処する方法は? Laravelでは、検証コードが電子メールで送信できない状況に対処する方法は? Mar 31, 2025 pm 11:48 PM

Laravelの電子メールの検証コードの送信の障害を処理する方法は、Laravelを使用することです...

DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? Apr 01, 2025 am 07:09 AM

DCATを使用するときにDCATADMIN(Laravel-Admin)にデータを追加するためにカスタムクリックのテーブル関数を実装する方法...

Laravel - ダンプサーバー Laravel - ダンプサーバー Aug 27, 2024 am 10:51 AM

Laravel - ダンプサーバー - Laravel ダンプサーバーには、Laravel 5.7 のバージョンが付属しています。以前のバージョンにはダンプ サーバーが含まれていません。ダンプサーバーはlaravel/laravelコンポーザーファイルの開発依存関係になります。

Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Apr 01, 2025 am 07:45 AM

Laravel FrameworkでRedis接続の共有の影響とLaravelフレームワークとRedisを使用する際のメソッドを選択すると、開発者は問題に遭遇する可能性があります。

Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Apr 01, 2025 am 09:09 AM

Laravel Multi-Tenant拡張機能パッケージStancl/Tenancyのカスタムテナントデータベース接続Laravel Multi-Tenant ExtensionパッケージStancl/Tenancyを使用したマルチテナントアプリケーションを構築する際の...

Laravel - アクション URL Laravel - アクション URL Aug 27, 2024 am 10:51 AM

Laravel - アクション URL - Laravel 5.7 では、「呼び出し可能なアクション URL」と呼ばれる新機能が導入されています。この機能は、アクションメソッドで文字列を受け入れるLaravel 5.6の機能に似ています。 Laravel 5.7 で導入された新しい構文の主な目的は、

See all articles