Laravelで雄弁でサブQueriesを使用する方法は?
Laravel Eloquentは、Select、from、Where、および条項の順序でサブQueriesをサポートし、生のSQLなしで柔軟なデータ検索を可能にします。 1。selectSub()を使用して、ユーザーごとの投稿カウントなどの計算列を追加します。 2。fromsub()またはfrom()で閉じて、グループ化されたデータの派生テーブルとしてサブクエリーを扱います。 3.関連データに基づいた条件付きフィルタリングに()、wherenotexists()、またはscalarサブ征服を使用します。 4.最新の投稿日までに注文したユーザーなど、関連するレコードからの値でsubqueriesを直接渡す。列の比較には常にwherecolumn()を好み、結合や熱心な負荷などの代替案を評価することにより、大きなデータセットのパフォーマンスへの影響を考慮してください。
Laravelで雄弁でサブQueriesを使用すると、1つのクエリを別のクエリに埋め込むことができます。これは、関連テーブルまたは同じテーブルのデータに基づいて結果をフィルタリング、選択、または注文する必要がある場合に役立ちます。クエリビルダーの上に構築されたLaravelのEloquent Ormは、 SELECT
、 FROM
WHERE
およびLaravel 5.6から始まる句ORDER BY
でサブQueriesをサポートしています。

雄弁でサブ征服を効果的に使用する方法は次のとおりです。
1。SELECT句のサブクエリ
サブクエリを使用して、結果に計算または集約された列を追加します。

Illuminate \ database \ query \ expressionを使用します。 $ users = user :: select( 'users。*'、new Expression( '(') post :: selectraw( 'count(*)') - > wherecolumn( 'posts.user_id'、 'users.id')) - > tosql() 。 ')post_count' ))) - > addbinding(post :: selectraw( 'count(*)') - > wherecolumn( 'posts.user_id'、 'users.id')) - > getBindings()、 'Select') - > get();
または、より良い: selectSub()
を使用してクリーナー構文:
$ users = user :: selectSub( post :: wherecolumn( 'posts.user_id'、 'users.id') - > selectraw( 'count(*)')、 「post_count」 ) - > get();
これにより、各ユーザーに
post_count
フィールドが追加され、投稿がカウントされます。
2。句(subquery結合)からサブクエリ
SubQueryをFROM
句の派生テーブルとして使用します。
$ rigtPosts = post :: select( 'user_id'、db :: raw( 'max(created_at)as datig_post_date')) - > groupby( 'user_id'); $ users = user :: fromsub($ raptoposts、 'rest_posts') - > join( 'users'、 'users.id'、 '='、 'rest_posts.user_id') - > get();
または、閉鎖でfrom()
を使用してください。
$ users = db :: table(function($ query){ $ query-> select( 'user_id'、db :: raw( 'max(created_at)as last_post'))) - > from( 'posts') - > groupby( 'user_id'); }、 'rest_posts') - > join( 'users'、 'users.id'、 '='、 'rest_posts.user_id') - > select( 'users.name'、 'rest_posts.last_post') - > get();
baseベーステーブルとしてグループ化またはフィルタリングされたデータを使用する必要がある場合に便利です。
3。条項のサブクエリ
サブクエリを使用して、値を条件付きで比較します。
$ users = user :: where( 'id'、 '!='、function($ query){ $ query-> from( 'users') - > selectraw( 'max(id)'); //最新のユーザーを除外します }) - > get();
より実用的な例:最新の投稿が1か月以上前にあるユーザーを入手してください。
$ users = user :: whereexists(function($ query){ $ query-> select(db :: raw(1)) - > from( 'posts') - > wherecolumn( 'posts.user_id'、 'users.id')) - > where( 'posts.created_at'、 '>'、now() - > submonth()); }) - > get();
または、スカラーサブクエリを使用します。
$ lastloginthreshold = now() - > subdays(30); $ inactiveUsers = user :: where(function($ query)use($ lastloginthreshold){ $ query-> where( 'last_login'、 '<'、$ lastloginthreshold) - > orwherenull( 'last_login'); }) - > where( 'id'、 'in'、function($ q){ $ q-> select( 'user_id') - > from( 'posts') - > where( 'created_at'、 '>'、now() - > subyear()); }) - > get();
conditional条件フィルタリングのために、
whereExists
、whereNotExists
、またはスカラー比較を使用します。
4。条項で順番のサブクエリ
サブクエリを使用した関連テーブルの値に基づいて結果を注文します。
例:最新の投稿の作成日までにユーザーを注文します。
$ users = user :: orderbydesc( post :: select( 'created_at') - > wherecolumn( 'posts.user_id'、 'users.id')) - >最新() - >制限(1) ) - > get();
より明確に:
$ users = user :: select( 'users。*') - > OrderByDesc( 投稿:: wherecolumn( 'posts.user_id'、 'users.id')) - > selectraw( 'max(created_at)') )) - > get();
これにより、これにより参加とグループ化が回避され、インデックスでうまく機能します。
重要なヒント
- メインクエリとサブクエリの間の列を比較するときは、常に
whereColumn()
を使用してください。 -
selectSub()
とfromSub()
を使用して、よりクリーンで読みやすいコードを使用します。 - パフォーマンスには注意してください。大規模なデータセットでは、サブキリーが遅くなる可能性があります。必要に応じて、結合または熱心な読み込みを使用することを検討してください。
- 生のサブ征服を使用する場合、必要に応じてパラメーターを手動でバインドすることを忘れないでください(ただし、Laravelはしばしばこれを処理します)。
基本的に、Laravelはサブ征服を管理しやすく表現力豊かにします。関連データに基づいて選択、フィルタリング、またはソートを選択するかどうかにかかわらず、ほとんどの場合、RAW SQLにドロップダウンせずに柔軟性を与えます。
以上がLaravelで雄弁でサブQueriesを使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

Laravelの構成キャッシュは、すべての構成ファイルを単一のキャッシュファイルにマージすることにより、パフォーマンスを向上させます。生産環境で構成キャッシュを有効にすると、各リクエストでI/O操作を削減し、ファイルの解析を行うと、構成の読み込みが高速化されます。 1.アプリケーションが展開され、構成が安定しており、頻繁な変更は必要ありません。 2。構成を有効にして変更した後、phpartisanconfigを再実行する必要があります:キャッシュを有効にします。 3.構成ファイルのランタイム条件に依存する動的ロジックまたはクロージャーを使用しないでください。 4.トラブルシューティングの問題の場合、まずキャッシュをクリアし、.ENV変数を確認して、再キャッシュする必要があります。

紹介テーブルを作成して、紹介、紹介、推奨コード、使用時間を含む推奨関係を記録します。 2.推奨データを管理するために、ユーザーモデルのBelongStomanyとHasmanyの関係を定義します。 3.登録時に一意の推奨コードを生成します(モデルイベントを通じて実装できます)。 4.登録中にパラメーターをクエリすることにより、推奨コードをキャプチャし、検証後に推奨関係を確立し、自己称賛を防ぎます。 5.推奨されるユーザーが指定された動作(サブスクリプション順序)を完了した場合、報酬メカニズムをトリガーします。 6.共有可能な推奨リンクを生成し、Laravel Signature URLを使用してセキュリティを強化します。 7.推奨事項の総数や変換された番号など、ダッシュボードに推奨統計を表示します。データベースの制約、セッション、またはCookieが持続することを確認する必要があります。

CheckPhp> = 8.1、Composer、およびWebserver; 2.CloneOrCreateProjectAndRunComposErinStall; 3.Copy.Env.Exampleto.ENVANDRUNPHPARTISANKEY :generate; 4.setDatabaseCredentialSin.EnvandrunphpartisanMigrate-- Seed; 5.StartServerWithPhpartisEnserve; 6.optionallyrunnpmins

シーダーファイルの作成:phpartisanmake:seederuserseederを使用してシーダークラスを生成し、実行方法のモデルファクトリーまたはデータベースクエリを介してデータを挿入します。 2。Databaseseederで他のシーダーを呼び出す:sulderseeder、Postseederなどを登録$ this-> call()を介して依存関係が正しいことを確認します。 3。シーダーの実行:PHPARTISANDBを実行する:種子をすべて登録したすべてのシーダーを実行するか、PHPARTISANMIGRATE:FRESS-シードを使用してデータをリセットして補充します。 4

新しいLaravelプロジェクトを作成し、サービスを開始します。 2。モデル、移行、コントローラーを生成し、移行を実行します。 3.ルート/api.phpのRESTFULルートを定義します。 4.ポストコントローラーに追加、削除、変更、クエリメソッドを実装し、JSON応答を返します。 5. PostmanまたはCurlを使用して、API関数をテストします。 6.オプションで、Sanctumを介してAPI認証を追加します。最後に、実用的なアプリケーションに適した、完全かつ拡張可能なLaravelRestapiの明確な構造を取得します。

chooseafeatureflagstrategysuchasconfigベース、データベース駆動型、orhird-partytoolslikeflagsmith.2.setupadatabase-drivensystemby-drivensystemmigrationforafeature_flagstablewithname、evanabled、andrulesfields、thenrunthigration.3

リポジトリパターンは、データアクセスロジックからビジネスロジックを切り離すために使用される設計パターンです。 1.インターフェイス(契約)を介してデータアクセスメソッドを定義します。 2。特定の操作は、リポジトリクラスによって実装されます。 3.コントローラーは、依存関係噴射を介してインターフェイスを使用し、データソースに直接接触しません。 4.利点には、きちんとしたコード、強力なテスト可能性、簡単なメンテナンス、チームのコラボレーションが含まれます。 5。中規模および大規模なプロジェクトに適用されると、小規模プロジェクトはモデルを直接使用できます。

Eloquentormは、Laravelの組み込みオブジェクトリレーショナルマッピングシステムです。ネイティブSQLの代わりにPHP構文を介してデータベースを操作し、コードをより簡潔でメンテナンスしやすくします。 1.各データテーブルはモデルクラスに対応し、各レコードはモデルインスタンスとして存在します。 2。アクティブレコードモードを採用すると、モデルインスタンスを単独で保存または更新できます。 3。サポートバッチ割り当て、およびセキュリティを確保するために$充填可能な属性をモデルで定義する必要があります。 4. 1対1、1対10、多目的などなど、強力な関係サポートを提供し、メソッド呼び出しを介して関連するデータにアクセスできます。 5。クエリを構築するために、Orderbyおよびその他のメソッドをChainedと呼ぶことができる統合クエリコンストラクター。 6。属性を取得または設定するときに数値をフォーマットできるアクセサと修飾子をサポートします。
