この記事では、Laravel の関連クエリによって返されるエラー ID の解決策を主に紹介します。これは非常に優れており、必要な場合は参照してください。
2 つのテーブルにid などの同じ名前のフィールドを指定した場合、その値はデフォルトで同じ名前の後続のフィールドによって上書きされ、予期しない結果が返されます。たとえば、次の関連クエリ:
PHP
$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
クエリが次のように構築されている場合、返されるクエリ結果は次のとおりです。 :
Laravel 関連のクエリが間違った ID を返します
ここでの ID の値は、優先順位テーブルの ID フィールドではなく、実行された SQL ステートメントが出力される場合:
select * from `priorities` right join `touch` on `priorities`.`touch_id` = `touch`.`id` where `priorities`.`type` = '1' order by `priorities`.`total_score` desc, `touch`.`created_at` desc
select * from `priorities` right join `touch` on `priorities`.`touch_id` = `touch`.`id` where `priorities`.`type` = '1' order by `priorities`.`total_score` desc, `touch`.`created_at` desc
クエリの結果は次の図に示されています:
SQL クエリを使用した結果は、実際には正しいです。別のテーブルにある同じ名前の ID フィールドの名前は、id1 です。デフォルトですが、Laravel によって返される ID 値は図に示されているものとは異なります。ID フィールドは、同じ名前の別のテーブルのフィールドによって上書きされています。
解決策は、フィールドを指定する選択メソッドを追加し、クエリ ステートメント コードを正しく構築することです:
PHP
$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user']) ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user']) ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id') ->where('priorities.type', 1) ->orderBy('priorities.total_score', 'desc') ->orderBy('touch.created_at', 'desc') ->get();
これで問題は解決します。その後、Laravel に注意を払う必要があります。将来的には 2 つ テーブルを結合するときに返されるフィールドを指定することをお勧めします。
これはLaravelのバグですか?フィールドの値が同じ名前のフィールド値で上書きされた場合、デフォルトで実行を続行する代わりにエラーを報告する必要がありますか?
github 上でも同じ問題を提起した人がいて、作者も解決策を提供しましたが、これより良い解決策はありません。
Laravel バージョン: 5.3
リンク: https://github.com/laravel/framework/issues/4962
上記がこの記事の全内容です、皆さんの学習に役立つことを願っています。
関連する推奨事項:
PHPApple APPのアプリ内購入後のサーバーへの二次検証の処理(プロジェクトエクスペリエンス)
PHP このプロジェクトは、WeChat QR コード スキャン決済 API (国内決済) を統合します
以上がPHPのLaravel関連クエリによって返されるエラーIDの解決策の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。