目次
2。句(subquery結合)からサブクエリ
3。条項のサブクエリ
4。条項で順番のサブクエリ
重要なヒント
ホームページ PHPフレームワーク Laravel Laravelで雄弁でサブQueriesを使用する方法は?

Laravelで雄弁でサブQueriesを使用する方法は?

Aug 05, 2025 am 07:53 AM
laravel eloquent

Laravel Eloquentは、Select、from、Where、および条項の順序でサブQueriesをサポートし、生のSQLなしで柔軟なデータ検索を可能にします。 1。selectSub()を使用して、ユーザーごとの投稿カウントなどの計算列を追加します。 2。fromsub()またはfrom()で閉じて、グループ化されたデータの派生テーブルとしてサブクエリーを扱います。 3.関連データに基づいた条件付きフィルタリングに()、wherenotexists()、またはscalarサブ征服を使用します。 4.最新の投稿日までに注文したユーザーなど、関連するレコードからの値でsubqueriesを直接渡す。列の比較には常にwherecolumn()を好み、結合や熱心な負荷などの代替案を評価することにより、大きなデータセットのパフォーマンスへの影響を考慮してください。

Laravelで雄弁でサブQueriesを使用する方法は?

Laravelで雄弁でサブQueriesを使用すると、1つのクエリを別のクエリに埋め込むことができます。これは、関連テーブルまたは同じテーブルのデータに基づいて結果をフィルタリング、選択、または注文する必要がある場合に役立ちます。クエリビルダーの上に構築されたLaravelのEloquent Ormは、 SELECTFROM WHEREおよびLaravel 5.6から始まる句ORDER BYでサブQueriesをサポートしています。

Laravelで雄弁でサブQueriesを使用する方法は?

雄弁でサブ征服を効果的に使用する方法は次のとおりです。


1。SELECT句のサブクエリ

サブクエリを使用して、結果に計算または集約された列を追加します。

Laravelで雄弁でサブQueriesを使用する方法は?
 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フィールドが追加され、投稿がカウントされます。

Laravelで雄弁でサブQueriesを使用する方法は?

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( &#39;last_login&#39;、 &#39;<&#39;、$ lastloginthreshold)
           - > orwherenull( &#39;last_login&#39;);
})
 - > where( &#39;id&#39;、 &#39;in&#39;、function($ q){
    $ q-> select( &#39;user_id&#39;)
       - > from( &#39;posts&#39;)
       - > where( &#39;created_at&#39;、 &#39;>&#39;、now() - > subyear());
}) - > get();

conditional条件フィルタリングのために、 whereExistswhereNotExists 、またはスカラー比較を使用します。


4。条項で順番のサブクエリ

サブクエリを使用した関連テーブルの値に基づいて結果を注文します。

例:最新の投稿の作成日までにユーザーを注文します。

 $ users = user :: orderbydesc(
    post :: select( &#39;created_at&#39;)
         - > wherecolumn( &#39;posts.user_id&#39;、 &#39;users.id&#39;))
         - >最新()
         - >制限(1)
) - > get();

より明確に:

 $ users = user :: select( &#39;users。*&#39;)
     - > OrderByDesc(
        投稿:: wherecolumn( &#39;posts.user_id&#39;、 &#39;users.id&#39;))
             - > selectraw( &#39;max(created_at)&#39;)
    ))
     - > get();

これにより、これにより参加とグループ化が回避され、インデックスでうまく機能します。


重要なヒント

  • メインクエリとサブクエリの間の列を比較するときは、常にwhereColumn()を使用してください。
  • selectSub()fromSub()を使用して、よりクリーンで読みやすいコードを使用します。
  • パフォーマンスには注意してください。大規模なデータセットでは、サブキリーが遅くなる可能性があります。必要に応じて、結合または熱心な読み込みを使用することを検討してください。
  • 生のサブ征服を使用する場合、必要に応じてパラメーターを手動でバインドすることを忘れないでください(ただし、Laravelはしばしばこれを処理します)。

基本的に、Laravelはサブ征服を管理しやすく表現力豊かにします。関連データに基づいて選択、フィルタリング、またはソートを選択するかどうかにかかわらず、ほとんどの場合、RAW SQLにドロップダウンせずに柔軟性を与えます。

以上がLaravelで雄弁でサブQueriesを使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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の構成キャッシュとは何ですか? Jul 27, 2025 am 03:54 AM

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

Laravelで紹介システムを実装する方法は? Laravelで紹介システムを実装する方法は? Aug 02, 2025 am 06:55 AM

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

Laravelプロジェクトを実行する方法は? Laravelプロジェクトを実行する方法は? Jul 28, 2025 am 04:28 AM

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

Laravelでデータベースをシードする方法は? Laravelでデータベースをシードする方法は? Jul 28, 2025 am 04:23 AM

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

LaravelでREST APIを構築する方法は? LaravelでREST APIを構築する方法は? Jul 30, 2025 am 03:41 AM

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

Laravelアプリに機能フラグを実装する方法は? Laravelアプリに機能フラグを実装する方法は? Jul 30, 2025 am 01:45 AM

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

Laravelのリポジトリ契約とは何ですか? Laravelのリポジトリ契約とは何ですか? Aug 03, 2025 am 12:10 AM

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

Laravelの雄弁なOrmとは何ですか? Laravelの雄弁なOrmとは何ですか? Jul 29, 2025 am 03:50 AM

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

See all articles