Laravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有
最近、編集者は世界最高のフレームワークとして知られる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('status', '<>', 1) ->groupBy('status') ->get();
Join操作
内连接 Inner Join#
使用join执行内连接操作,该函数第一个参数为要连接的表名,其它参数指定了连接约束
$users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get();
左连接 Left Join#
使用leftJoin方法执行左连接操作,参数和join一样$users =
DB::table('users') ->leftJoin('posts', 'users.id', '=', 'posts.user_id') ->get();
高级Join方法#
如果join方法的约束条件比较复杂,可以使用闭包函数的方式指定
<p style="margin-top: 7px;">DB::table('users')<br/> ->join('contacts', function ($join) {<br/> $join->on('users.id', '=', 'contacts.user_id')->orOn(...);<br/> })<br/> ->get();<br/></p>
如果join约束中要使用列值与指定数组比较,则可以使用where和OrWhere方法
DB::table('users') ->join('contacts', function ($join) { $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', 5); }) ->get();
Union操作
要使用union操作,可以先创建一个query,然后再使用union方法去绑定第二个query
$first = DB::table('users') ->whereNull('first_name'); $users = DB::table('users') ->whereNull('last_name') ->union($first) ->get();
同样,unionAll
$users = DB::table('users')->where('votes', '=', 100)->get(); $users = DB::table('users')->where('votes', 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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