この記事の内容は、Laravel の関連付けモデルの has と with の違いに関するものです (詳細な紹介)。必要な方は参考にしていただければ幸いです。
最初にコードを見てみましょう:
$userCoupons = UserCoupons::with(['coupon' => function($query) use($groupId){ return $query->select('id', 'group_id', 'cover', 'group_number', 'group_cover')->where([ 'group_id' => $groupId, ]); }]) // 更多查询省略...
データ構造は、ユーザー クーポン テーブル (user_coupons)、クーポン テーブル (クーポン)、販売者テーブル (corps)、およびグループの 3 つのテーブルです。クーポン テーブル (group_coupons) (表示しやすいように、最後の 2 つの項目は削除されています)
ここでは、当初、モデルの関連付けを使用して、ユーザー クーポン内の指定されたグループ gourpId に属するすべてのデータを見つける予定でした。 (空の場合、データは返されません)。
しかし、一部の結果は私が望むものではありません:
array(20) { ["id"]=> int(6) ["user_id"]=> int(1) ["corp_id"]=> int(1) ["coupon_id"]=> int(4) ["obtain_time"]=> int(1539739569) ["receive_time"]=> int(1539739569) ["status"]=> int(1) ["expires_time"]=> int(1540603569) ["is_selling"]=> int(0) ["from_id"]=> int(0) ["sell_type"]=> int(0) ["sell_time"]=> int(0) ["sell_user_id"]=> int(0) ["is_compose"]=> int(0) ["group_cover"]=> string(0) "" ["is_delete"]=> int(0) ["score"]=> int(100) ["created_at"]=> NULL ["updated_at"]=> NULL ["coupon"]=> NULL // 注意返回了coupons为空的数据 }
レコード内の一部のクーポンにはレコードがあり、一部は空です。考えてみてください。with は、SQL の in() を使用して実装された、いわゆるプリロードにすぎません。メインの user_coupons データが何であってもリストされます。
これには 2 つの SQL クエリがあり、1 つ目はメイン データをチェックし、2 つ目は関連付けをチェックします。2 つ目の SQL は次のとおりです:
select `id`, `group_id`, `cover`, `group_number`, `group_cover` from `youquan_coupons` where `youquan_coupons`.`id` in (1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14) and (`group_id` = 1) and `youquan_coupons`.`deleted_at` is null
2 つ目の SQL が空の場合、メインレコード 関連するフィールドは NULL です。
後で、Laravel の関連付けられたモデルの has() メソッドを見ました。 has() は既存の関連付けられたクエリに基づいています (同じ効果で、条件を記述するのに便利なだけです)。
ここでのアイデアは、最初のクエリ ロジックにクーポン データがあるかどうかの判断を入れて、空のレコードをフィルターで除外できるようにすることです。
whereHas() を追加した後のコードは次のとおりです。
$userCoupons = UserCoupons::whereHas('coupon', function($query) use($groupId){ return $query->select('id', 'group_id', 'cover', 'group_number', 'group_cover')->where([ 'group_id' => $groupId, ]); })->with(['coupon' => function($query) use($groupId){ return $query->select('id', 'group_id', 'cover', 'group_number', 'group_cover'); }])-> // ...
最後の SQL を見てください:
select * from `youquan_user_coupons` where exists (select `id`, `group_id`, `cover`, `group_number`, `group_cover` from `youquan_coupons` where `youquan_user_coupons`.`coupon_id` = `youquan_coupons`.`id` and (`group_ids` = 1) and `youquan_coupons`.`deleted_at` is null) and (`status` = 1 and `user_id` = 1)
ここでは、実際に存在するレコードをフィルターするためにexists()を使用しています。次に、with() クエリの次のステップに進みます。この時点ですべてがフィルタリングされているため、with は条件を削除できます。
特にリストの場合、2 つの関数を区別することが重要であることは明らかであり、空のデータを特別に除外する必要はなく、ページングを行うのは簡単です。
以上がLaravelアソシエーションモデルにおけるhasとwithの違い(詳細紹介)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Taskmanagementtoolsareessentialforeffectiveremoteprojectmanagementbyprioritizingtasksandtrackingprogress.1)UsetoolslikeTrelloandAsanatosetprioritieswithlabelsortags.2)EmploytoolslikeJiraandMonday.comforvisualtrackingwithGanttchartsandprogressbars.3)K

laravel10EnhancesperformAnceTheveralkeyfeatures.1)ItintroduceSquerybuilderCachinucedatedatabaseload.2)itoptimizeseLoquentModelloadingwithlazingproxies.3)itimprovesRoutingWithineSystem.4)itemproveStingwithingingSystem.4)

最高のフルスタックのLaravelアプリケーション展開戦略には、1。Zeroダウンタイム展開、2。ブルーグリーン展開、3。連続展開、4。Canaryリリースが含まれます。 1.ゼロダウンタイムデプロイメントは、EnvoyまたはDeployerを使用して展開プロセスを自動化して、更新時にアプリケーションを利用できるようにします。 2。ブルーとグリーンの展開により、2つの環境を維持し、迅速なロールバックを可能にすることにより、ダウンタイムの展開が可能になります。 3.継続的な展開GithubactionsまたはGitlabci/CDを使用して、展開プロセス全体を自動化します。 4。nginx構成を通じてカナリーがリリースされ、パフォーマンスの最適化と迅速なロールバックを確保するために、新しいバージョンをユーザーに徐々に宣伝します。

ToscalealAravelApplicationively、Focusondatabasesharding、Caching、Loadbalancing、andMicroservices.1)databaseShardingTodistributedataacrossMultipledatabase.2)uselaraval'scachingsmultedistestemedisemememememememedtededatedatab

ToovercomcomcommunicationbarriersindistributedTeams、使用:1)VideoCallsForface-to-faceInteraction、2)setClearResponsetimeExpectations、3)ChooseaprateCommunicationSoools、4)CreateAmCommunicationGuide、and5)

laravelbladeEnhancesFrontendTemplatinginfull stackprojectsbyofferingcleansyntaxandpowerfulfeatures.1)itallows foreasyvariabledisplayandcontrolstructures.2)bladeSupportscreating andReusing components、

laravelisidealforfull-stackapplicationsduetoitseLegantyntax、包括的なセコスシステム、およびパワーフルフィーチュア

forRemotework、iusezoomforvideocalls、slackformessaging、trelloforprojectmanagement、andgithubforcodecollaboration.1)zoomisReliaible forlargemeetingsbuthefreeversion.2)slackintegrateswellwithtoolSotoolsotification -ortificationoverload.3)trel


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









