{"id":1022,"date":"2025-06-12T05:04:59","date_gmt":"2025-06-11T21:04:59","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/1022.html"},"modified":"2025-06-12T05:04:59","modified_gmt":"2025-06-11T21:04:59","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8-laravel-%e4%b8%ad%e5%ae%9e%e7%8e%b0-graphql","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1022.html","title":{"rendered":"\u5982\u4f55\u5728 Laravel \u4e2d\u5b9e\u73b0 GraphQL"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Laravel &#20013;&#23454;&#29616; GraphQL &#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#23433;&#35013;&#24517;&#35201;&#30340;&#21253;<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; <code>graphql\/laravel<\/code> &#21253;&#21644; <code>nuwave\/lighthouse<\/code> &#21253;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require nuwave\/lighthouse graphql\/laravel<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622; Lighthouse<\/strong>&#65306;\n&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#29983;&#25104; Lighthouse &#30340;&#37197;&#32622;&#25991;&#20214;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan lighthouse:install<\/code><\/pre>\n<p>&#36825;&#23558;&#21019;&#24314;&#19968;&#20123;&#24517;&#35201;&#30340;&#25991;&#20214;&#21644;&#30446;&#24405;&#65292;&#22914; <code>app\/GraphQL\/Schema<\/code>&#12289;<code>app\/GraphQL\/Mutations<\/code> &#31561;&#12290;<\/p>\n<\/li>\n<li>\n<p><strong>&#23450;&#20041; GraphQL Schema<\/strong>&#65306;\n&#22312; <code>app\/GraphQL\/Schema<\/code> &#30446;&#24405;&#19979;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#25110;&#22810;&#20010; <code>.graphql<\/code> &#25991;&#20214;&#26469;&#23450;&#20041;&#20320;&#30340; GraphQL &#22270;&#24418;&#32467;&#26500;&#12290;&#20363;&#22914;&#65292;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>User.graphql<\/code> &#30340;&#25991;&#20214;&#65306;<\/p>\n<pre><code class=\"language-graphql\">type Query {\n user(id: ID!): User!\n}\n\ntype Mutation {\n createUser(name: String!, email: String!): User!\n}\n\ntype User {\n id: ID!\n name: String!\n email: String!\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#21019;&#24314; GraphQL Resolver<\/strong>&#65306;\n&#22312; <code>app\/GraphQL\/Mutations<\/code> &#30446;&#24405;&#19979;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#25110;&#22810;&#20010; PHP &#31867;&#26469;&#22788;&#29702;&#36825;&#20123;&#26597;&#35810;&#21644; mutation&#12290;&#20363;&#22914;&#65292;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>CreateUserResolver.php<\/code> &#30340;&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppGraphQLMutations;\n\nuse GraphQLTypeDefinitionType;\nuse IlluminateSupportFacadesAuth;\nuse GraphQLTypeSchemaBuilder;\n\nclass CreateUserResolver\n{\n   public function __invoke(SchemaBuilder $schema, array $args)\n   {\n       $user = Auth::user()-&gt;create([\n           'name' =&gt; $args['name'],\n           'email' =&gt; $args['email'],\n       ]);\n\n       return [\n           'id' =&gt; $user-&gt;id,\n           'name' =&gt; $user-&gt;name,\n           'email' =&gt; $user-&gt;email,\n       ];\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#27880;&#20876; Resolver<\/strong>&#65306;\n&#22312; <code>config\/lighthouse.php<\/code> &#25991;&#20214;&#20013;&#65292;&#27880;&#20876;&#20320;&#30340; resolver&#12290;<\/p>\n<pre><code class=\"language-php\">'resolvers' =&gt; [\n   'Query.user' =&gt; AppGraphQLMutationsUserResolver::class,\n   'Mutation.createUser' =&gt; AppGraphQLMutationsUserResolver::class,\n],<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622;&#36335;&#30001;<\/strong>&#65306;\n&#22312; <code>routes\/web.php<\/code> &#25110; <code>routes\/api.php<\/code> &#25991;&#20214;&#20013;&#65292;&#37197;&#32622;&#20320;&#30340;&#36335;&#30001;&#20197;&#26292;&#38706; GraphQL API&#12290;<\/p>\n<pre><code class=\"language-php\">use GraphQLHttpLaravelHttpController as GraphQLController;\n\nRoute::get('\/graphql', GraphQLController::class);<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#27979;&#35797; GraphQL API<\/strong>&#65306;\n&#20351;&#29992;&#24037;&#20855;&#22914; Postman &#25110; cURL &#26469;&#27979;&#35797;&#20320;&#30340; GraphQL API&#12290;&#20363;&#22914;&#65292;&#20351;&#29992; cURL &#21457;&#36865;&#19968;&#20010; POST &#35831;&#27714;&#21040; <code>\/graphql<\/code> &#36335;&#30001;&#65292;&#24182;&#20256;&#36882;&#19968;&#20010;&#26597;&#35810;&#65306;<\/p>\n<pre><code class=\"language-bash\">curl -X POST http:\/\/localhost\/graphql \n   -H \"Content-Type: application\/json\" \n   -d '{\"query\": \"{ user(id: 1) { id name email }}\"}'<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#23601;&#21487;&#20197;&#22312; Laravel &#20013;&#25104;&#21151;&#23454;&#29616; GraphQL &#24182;&#25552;&#20379; RESTful &#25509;&#21475;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#27010;&#35272;<\/h2><p>&#23558;GraphQL&#38598;&#25104;&#21040;Laravel&#39033;&#30446;&#20013;&#21487;&#20197;&#20026;&#24744;&#30340;web&#24212;&#29992;&#31243;&#24207;&#24102;&#26469;&#38761;&#21629;&#24615;&#30340;&#21464;&#21270;&#12290;GraphQL&#25552;&#20379;&#20102;&#19982;&#20256;&#32479;REST API&#30456;&#27604;&#26356;&#39640;&#25928;&#21644;&#24378;&#22823;&#30340;&#26367;&#20195;&#26041;&#26696;&#65292;&#20801;&#35768;&#23458;&#25143;&#31471;&#20165;&#26597;&#35810;&#20182;&#20204;&#25152;&#38656;&#30340;&#25968;&#25454;&#12290;&#22312;&#26412;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#21521;&#24744;&#20171;&#32461;&#22914;&#20309;&#23558;GraphQL&#28155;&#21152;&#21040;Laravel&#39033;&#30446;&#20013;&#12290;<\/p><h3>GraphQL&#26159;&#19968;&#31181;&#29992;&#20110;&#26500;&#24314;&#21487;&#25193;&#23637;API&#30340;&#31995;&#32479;&#65292;&#23427;&#20801;&#35768;&#23458;&#25143;&#31471;&#20197;&#38382;&#39064;&#30340;&#24418;&#24335;&#21521;&#26381;&#21153;&#22120;&#35831;&#27714;&#25968;&#25454;&#65292;&#32780;&#19981;&#26159;&#20687;RESTful API&#37027;&#26679;&#25552;&#20379;&#23436;&#25972;&#30340;&#36164;&#28304;&#21015;&#34920;&#12290;GraphQL&#30340;&#26680;&#24515;&#24605;&#24819;&#26159;&#36890;&#36807;&#23450;&#20041;&#19968;&#32452;&#26126;&#30830;&#30340;&#38382;&#39064;&#26469;&#33719;&#21462;&#25152;&#38656;&#30340;&#25968;&#25454;&#65292;&#36825;&#20351;&#24471;&#24320;&#21457;&#32773;&#33021;&#22815;&#26356;&#31934;&#30830;&#22320;&#25511;&#21046;&#20182;&#20204;&#20174;&#26381;&#21153;&#22120;&#19978;&#33719;&#21462;&#30340;&#20449;&#24687;&#12290;GraphQL&#36890;&#24120;&#19982;JavaScript&#32534;&#20889;&#30340;&#21069;&#31471;&#26694;&#26550;&#65288;&#22914;React&#21644;Vue&#65289;&#32467;&#21512;&#20351;&#29992;&#65292;&#20197;&#23454;&#29616;&#21160;&#24577;&#12289;&#39640;&#25928;&#30340;&#29992;&#25143;&#30028;&#38754;&#12290;<\/h3><p>GraphQL &#26159;&#19968;&#31181;&#24320;&#28304;&#30340;&#25968;&#25454;&#26597;&#35810;&#21644;&#25805;&#20316;&#35821;&#35328;&#65292;&#20197;&#21450;&#25191;&#34892;&#26597;&#35810;&#30340;&#36816;&#34892;&#26102;&#12290;&#23427;&#25552;&#20379;&#20102;&#26356;&#25551;&#36848;&#24615;&#21644;&#39640;&#25928;&#30340;&#26041;&#24335;&#26469;&#19982;&#25968;&#25454;&#36827;&#34892;&#20132;&#20114;&#12290;<\/p><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;&#31995;&#32479;&#19978;&#24050;&#32463;&#23433;&#35013;&#20102;Laravel&#12290;&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#23433;&#35013;&#65292;&#24744;&#21487;&#20197;&#21442;&#32771;&#20197;&#19979;&#25945;&#31243;&#20043;&#19968;&#65306;<\/p><p>&#22914;&#20309;&#22312;Ubuntu&#19978;&#23433;&#35013;&#21644;&#37197;&#32622;Laravel&#65288;&#20351;&#29992;Nginx&#65289;<\/p><p>&#22914;&#20309;&#22312;DigitalOcean&#19978;&#20351;&#29992;Laravel Forge&#37096;&#32626;Laravel&#39033;&#30446;<\/p><p>&#22914;&#20309;&#22312;Windows&#21644;Mac&#19978;&#23433;&#35013;Laravel<\/p><p>&#22914;&#20309;&#20351;&#29992;Docker Compose&#35774;&#32622;Laravel&#29615;&#22659;<\/p><h2>&#27493;&#39588;&#35828;&#26126;<\/h2><h3>&#27493;&#39588;1&#65306;&#23433;&#35013;GraphQL Laravel&#25193;&#23637;&#21253;<\/h3><pre><code>composer require rebing\/graphql-laravel<\/code><\/pre><p>&#36825;&#20010;&#21629;&#20196;&#20250;&#23433;&#35013;&#30001;Rebing&#24320;&#21457;&#30340;GraphQL Laravel&#21253;&#65292;&#35813;&#21253;&#25552;&#20379;&#20102;&#35768;&#22810;&#39044;&#35774;&#21151;&#33021;&#65292;&#21253;&#25324;&#25991;&#20214;&#19978;&#20256;&#25903;&#25345;&#12289;&#38169;&#35823;&#22788;&#29702;&#20197;&#21450;&#25209;&#37327;&#26597;&#35810;&#31561;&#20854;&#20182;&#29305;&#24615;&#12290;<\/p><h3>&#27493;&#39588; 2&#65306;&#21457;&#24067;&#37197;&#32622;&#25991;&#20214;<\/h3><pre><code>php artisan vendor:publish --provider=\"RebingGraphQLGraphQLServiceProvider\"<\/code><\/pre><p>&#35813;&#21629;&#20196;&#23558;&#20250;&#21457;&#24067; GraphQL &#37197;&#32622;&#25991;&#20214;&#21040;<code>config\/graphql.php<\/code>&#30446;&#24405;&#12290;&#24744;&#21487;&#20197;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#35843;&#25972;&#35774;&#32622;&#65292;&#20363;&#22914;&#22768;&#26126;&#27169;&#24335;&#12289;&#23433;&#20840;&#24615;&#31561;&#12290;<\/p><h3>&#27493;&#39588;3&#65306;&#23450;&#20041;&#20320;&#30340;&#31867;&#22411;<\/h3><p>&#22312;GraphQL&#20013;&#65292;&#31867;&#22411;&#33267;&#20851;&#37325;&#35201;&#65292;&#22240;&#20026;&#23427;&#20204;&#23450;&#20041;&#20102;&#20320;&#21487;&#20197;&#26597;&#35810;&#30340;&#25968;&#25454;&#30340;&#24418;&#29366;&#12290;&#35753;&#25105;&#20204;&#20026;&#25105;&#20204;&#30340;GraphQL&#35774;&#32622;&#23450;&#20041;&#19968;&#20010;&#31616;&#21333;&#30340;&#31867;&#22411;&#12290;<\/p><pre><code>php artisan make:graphql:type UserType<\/code><\/pre><p>&#19968;&#26086;&#21019;&#24314;&#23436;&#25104;&#65292;&#32534;&#36753;&#20301;&#20110;&#30340;&#29983;&#25104;&#31867;&#22411;&#12290;<code>app\/GraphQL\/Types\/UserType.php<\/code>&#65306;<\/p><pre><code>&lt;?php\n\nnamespace AppGraphQLTypes;\n\nuse GraphQLTypeDefsGraphQLType;\nuse GraphQLTypeDefinitionType;\nuse AppModelsUser;\n\nclass UserType extends GraphQLType {\n  protected $attributes = [\n    'name' =&gt; 'User',\n    'description' =&gt; 'A user',\n    'model' =&gt; User::class,\n  ];\n\n  public function fields(): array {\n    return [\n      'id' =&gt; [\n        'type' =&gt; Type::nonNull(Type::int()),\n        'description' =&gt; 'The id of the user',\n      ],\n      \/\/ Other fields like 'name', 'email', etc.\n    ];\n  }\n}\n<\/code><\/pre><h3>&#27493;&#39588;4&#65306;&#23450;&#20041;&#20320;&#30340;&#26597;&#35810;<\/h3><p>&#26597;&#35810;&#20801;&#35768;&#20320;&#22312;GraphQL&#20013;&#26816;&#32034;&#25968;&#25454;&#12290;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#26597;&#35810;&#26469;&#33719;&#21462;&#29992;&#25143;&#12290;<\/p><pre><code>php artisan make:graphql:query UsersQuery<\/code><\/pre><p>&#25105;&#20204;&#38656;&#35201;&#22635;&#20805;&#25105;&#20204;&#30340;<code>app\/GraphQL\/Queries\/UsersQuery.php<\/code>&#20320;&#22909;&#65281;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<\/p><pre><code>&lt;?php\n\nnamespace AppGraphQLQueries;\n\nuse GraphQLTypeDefsGraphQLType;\nuse GraphQLTypeDefinitionType;\nuse RebingGraphQLSupportQuery;\n\nuse AppModelsUser;\n\n...\n<\/code><\/pre><h3>&#27493;&#39588; 5&#65306;&#35774;&#32622; GraphQL &#27169;&#22411;<\/h3><p>&#29616;&#22312;&#20320;&#38656;&#35201;&#20026;&#20320;&#30340;&#26597;&#35810;&#12289;&#26356;&#26032;&#21644;&#31867;&#22411;&#23450;&#20041;&#19968;&#20010;&#27169;&#24335;&#65288;schema&#65289;&#12290;<\/p><p>&#32534;&#36753;<code>config\/graphql.php<\/code>&#23450;&#20041;&#19968;&#20010;&#26032;&#30340;&#26550;&#26500;&#65306;<\/p><pre><code>'schemas' =&gt; [\n  'default' =&gt; [\n    'query' =&gt; [\n      'users' =&gt; AppGraphQLQueriesUsersQuery::class,\n    ],\n    \/\/ 'mutation' =&gt; [\n    \/\/ ],\n    \/\/ 'middleware' =&gt; [],\n    \/\/ 'method' =&gt; ['get', 'post'],\n  ],\n],\n<\/code><\/pre><h3>&#27493;&#39588; 6&#65306;&#21019;&#24314; GraphQL &#25509;&#21475;<\/h3><p>&#32534;&#36753;&#12290;<code>routes\/web.php<\/code>&#28155;&#21152;&#36335;&#30001;&#21040;GraphQL&#31471;&#28857;&#30340;&#25991;&#20214;&#12290;<\/p><pre><code>Route::post('\/graphql', 'GraphQLController@query');\n<\/code><\/pre><p>GraphQL&#25511;&#21046;&#22120;&#23558;&#25104;&#20026;&#25152;&#26377;GraphQL&#26597;&#35810;&#30340;&#20837;&#21475;&#28857;&#12290;<\/p><h3>&#27493;&#39588; 7&#65306;&#27979;&#35797;&#24744;&#30340; GraphQL &#37197;&#32622;<\/h3><p>&#29616;&#22312;&#21487;&#20197;&#27979;&#35797;GraphQL API&#20102;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#24037;&#20855;&#22914;GraphiQL&#25110;Postman&#26469;&#26597;&#35810;&#20320;&#30340;&#31471;&#28857;&#12290;&#36825;&#37324;&#26377;&#19968;&#20010;&#31034;&#20363;&#26597;&#35810;&#65306;<\/p><pre><code>{\n  users {\n    id\n    name\n  }\n}\n<\/code><\/pre><p>&#35813;&#26597;&#35810;&#23558;&#36820;&#22238;&#25152;&#26377;&#29992;&#25143;&#21450;&#20854;ID&#21644;&#22995;&#21517;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#20171;&#32461;&#20102;&#22914;&#20309;&#23558;GraphQL&#38598;&#25104;&#21040;Laravel&#39033;&#30446;&#20013;&#30340;&#22522;&#26412;&#27493;&#39588;&#12290;GraphQL&#21487;&#20197;&#20026;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#25552;&#20379;&#19968;&#20010;&#39640;&#25928;&#12289;&#24378;&#22823;&#30340;&#26597;&#35810;&#21644;&#25805;&#20316;&#25968;&#25454;&#30340;&#25509;&#21475;&#12290;&#34429;&#28982;&#25105;&#20204;&#22312;&#39640;&#38454;&#27493;&#39588;&#19978;&#36827;&#34892;&#20102;&#31616;&#35201;&#20171;&#32461;&#65292;&#20294;GraphQL&#36824;&#25552;&#20379;&#20102;&#35768;&#22810;&#20854;&#20182;&#21151;&#33021;&#65292;&#21253;&#25324;&#20462;&#25913;&#25968;&#25454;&#65288;&#29992;&#20110;&#25968;&#25454;&#25805;&#32437;&#65289;&#12289;&#23454;&#26102;&#26356;&#26032;&#65288;&#36890;&#36807;&#35746;&#38405;&#65289;&#20197;&#21450;&#39640;&#32423;&#26597;&#35810;&#21151;&#33021;&#12290;<\/p><p>&#25353;&#29031;&#36825;&#20010;&#25351;&#21335;&#65292;&#20320;&#29616;&#22312;&#24050;&#32463;&#24314;&#31435;&#20102;&#19968;&#20010;&#22362;&#23454;&#30340;&#22522;&#30784;&#65292;&#24182;&#21487;&#20197;&#25506;&#32034;GraphQL&#20016;&#23500;&#30340;&#21151;&#33021;&#12290;&#35831;&#22987;&#32456;&#26597;&#38405;GraphQL&#30340;&#23448;&#26041;&#25991;&#26723;&#20197;&#21450;&#24744;&#27491;&#22312;&#20351;&#29992;&#30340;Laravel&#21253;&#20197;&#33719;&#21462;&#26356;&#35814;&#32454;&#30340;&#20449;&#24687;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>GraphQL &#26159;&#19968;&#31181;&#36731;&#37327;&#32423;&#30340; API &#23458;&#25143;&#31471;&#35821;&#35328;&#65292;&#29992;&#20110;&#26500;&#24314;&#21644;&#26597;&#35810;&#25968;&#25454;&#12290;Laravel 5.8 &#21450;&#26356;&#39640;&#29256;&#26412;&#25903;&#25345; GraphQL&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#20351;&#29992; Laravel &#21644; GraphQL &#23454;&#29616;&#22522;&#26412;&#26597;&#35810;&#30340;&#19968;&#20010;&#31616;&#21333;&#31034;&#20363;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; Laravel &#30340; GraphQL &#25193;&#23637;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#23433;&#35013;&#23427;&#65306;<\/p>\n<pre><code>composer require \"laravel\/framework&gt;=5.8\"<\/code><\/pre>\n<\/li>\n<li>\n<p>&#28982;&#21518;&#65292;&#22312;&#39033;&#30446;&#30340; <code>app\/Http\/Kernel.php<\/code> &#25991;&#20214;&#20013;&#21551;&#29992; GraphQL&#12290;&#36825;&#23558;&#20801;&#35768;&#23458;&#25143;&#31471;&#21457;&#36865; GraphQL &#26597;&#35810;&#21040;&#26381;&#21153;&#22120;&#12290;<\/p>\n<pre><code class=\"language-php\">protected $routeMiddleware = [\n   \/\/ ...\n   'graphql' =&gt; AppHttpMiddlewareGraphQL::class,\n];<\/code><\/pre>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702; GraphQL &#35831;&#27714;&#12290;&#20363;&#22914;&#65292;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>GraphQLController.php<\/code> &#30340;&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse GraphQL;\nuse GraphQLTypeDefinitionType;\nuse GraphQLErrorUserError;\nuse GraphQLSupportFacadesGraphQl;\nuse AppModelsUser;\n\nclass GraphQLController extends Controller\n{\n   public function __construct()\n   {\n       parent::__construct();\n       GraphQl::register($this);\n   }\n\n   \/**\n    * @param Request $request\n    * @return array\n    *\/\n   public function graphql(Request $request)\n   {\n       try {\n           return GraphQl::resolve($this, 'handle')-&gt;execute($request-&gt;query());\n       } catch (Exception $e) {\n           throw new UserError('Something went wrong.');\n       }\n   }\n\n   private function handle($data)\n   {\n       if ($data['name'] == 'admin') {\n           return User::where('name', 'admin')-&gt;firstOrFail();\n       } else {\n           return User::all()-&gt;sortByDesc('id');\n       }\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>&#22312; <code>config\/graphql.php<\/code> &#25991;&#20214;&#20013;&#23450;&#20041; GraphQL &#31867;&#22411;&#12290;<\/p>\n<pre><code class=\"language-php\">'types' =&gt; [\n   'User' =&gt; [\n       'type' =&gt; Type::nonNull(Type::string()),\n       'fields' =&gt; [\n           'id' =&gt; [\n               'type' =&gt; Type::integer(),\n               'description' =&gt; 'The user's ID.',\n           ],\n           'name' =&gt; [\n               'type' =&gt; Type::string(),\n               'description' =&gt; 'The user's name.',\n           ],\n       ],\n   ],\n]<\/code><\/pre>\n<\/li>\n<li>\n<p>&#26368;&#21518;&#65292;&#21551;&#21160; Laravel &#24212;&#29992;&#24182;&#36816;&#34892; GraphQL &#27979;&#35797;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan serve --host=0.0.0.0<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#22312;&#27983;&#35272;&#22120;&#20013;&#36755;&#20837; <a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cDovL2xvY2FsaG9zdDo4MDAwL2dyYXBocWw=\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8000\/graphql<\/a> &#26469;&#27979;&#35797; GraphQL API&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#31867;&#20284;&#20110;&#36825;&#26679;&#30340;&#26597;&#35810;&#26469;&#27979;&#35797;&#65306;<\/p>\n<pre><code class=\"language-json\">{\n  \"query\": \"{ users { id name } }\"\n}<\/code><\/pre>\n<p>&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; Laravel &#30340; GraphQL &#25193;&#23637;&#26469;&#23454;&#29616;&#22522;&#26412;&#30340; GraphQL &#26597;&#35810;&#21151;&#33021;&#12290;&#22914;&#26524;&#20320;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#23450;&#21046;&#25110;&#32773;&#25193;&#23637;&#65292;&#35831;&#21442;&#32771;&#23448;&#26041;&#25991;&#26723;&#65306;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9ncmFwaHFsLm9yZy9sZWFybi9sYXJhdmVsLw==\" rel=\"noopener noreferrer nofollow\">https:\/\/graphql.org\/learn\/laravel\/<\/a><\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Laravel &#20013;&#23454;&#29616; GraphQL &#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#038;#..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-1022","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1022"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1022"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1022"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}