{"id":859,"date":"2025-06-12T01:20:06","date_gmt":"2025-06-11T17:20:06","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/859.html"},"modified":"2025-06-12T01:20:06","modified_gmt":"2025-06-11T17:20:06","slug":"laravel-eloquent%ef%bc%9a%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84url%e7%9f%ad%e9%93%be%e6%8e%a5%e6%9c%8d%e5%8a%a1","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/859.html","title":{"rendered":"Laravel + Eloquent\uff1a\u8bbe\u8ba1\u4e00\u4e2a\u7b80\u5355\u7684URL\u77ed\u94fe\u63a5\u670d\u52a1"},"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>&#22909;&#30340;&#65292;&#19979;&#38754;&#26159;&#19968;&#20010;&#20351;&#29992; Laravel &#21644; Eloquent &#35774;&#35745;&#31616;&#21333; URL &#30701;&#38142;&#25509;&#26381;&#21153;&#30340;&#31034;&#20363;&#12290;&#25105;&#20204;&#23558;&#21019;&#24314;&#19968;&#20010; <code>ShortLink<\/code> &#27169;&#22411;&#65292;&#24182;&#32534;&#20889;&#19968;&#20123;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#30701;&#38142;&#25509;&#30340;&#29983;&#25104;&#21644;&#35299;&#26512;&#12290;<\/p>\n<h3>1. &#21019;&#24314; ShortLink &#27169;&#22411;<\/h3>\n<p>&#39318;&#20808;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#27169;&#22411;&#25991;&#20214; <code>ShortLink.php<\/code> &#22312; <code>app\/Models<\/code> &#30446;&#24405;&#19979;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass ShortLink extends Model\n{\n    protected $fillable = ['long_url'];\n\n    public function redirects()\n    {\n        return $this-&gt;hasMany(Redirect::class);\n    }\n}<\/code><\/pre>\n<h3>2. &#21019;&#24314; Redirect &#27169;&#22411;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#21478;&#19968;&#20010;&#27169;&#22411;&#25991;&#20214; <code>Redirect.php<\/code> &#22312; <code>app\/Models<\/code> &#30446;&#24405;&#19979;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass Redirect extends Model\n{\n    protected $fillable = ['short_code', 'created_at'];\n\n    public function shortLink()\n    {\n        return $this-&gt;belongsTo(ShortLink::class);\n    }\n}<\/code><\/pre>\n<h3>3. &#21019;&#24314; ShortLinkController<\/h3>\n<p>&#29616;&#22312;&#65292;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#25991;&#20214; <code>ShortLinkController.php<\/code> &#22312; <code>app\/Http\/Controllers<\/code> &#30446;&#24405;&#19979;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllers;\n\nuse AppModelsShortLink;\nuse AppModelsRedirect;\nuse IlluminateHttpRequest;\n\nclass ShortLinkController extends Controller\n{\n    \/\/ &#29983;&#25104;&#30701;&#38142;&#25509;\n    public function generate(Request $request)\n    {\n        $longUrl = $request-&gt;input('url');\n        if (empty($longUrl)) {\n            return response()-&gt;json(['error' =&gt; '&#35831;&#36755;&#20837;&#38271;URL'], 400);\n        }\n\n        $shortCode = str_random(6); \/\/ &#29983;&#25104;&#38543;&#26426;&#30701;&#30721;\n        $redirect = new Redirect();\n        $redirect-&gt;short_code = $shortCode;\n        $redirect-&gt;short_link()-&gt;associate(new ShortLink());\n        $redirect-&gt;save();\n\n        return response()-&gt;json(['short_code' =&gt; $shortCode]);\n    }\n\n    \/\/ &#35299;&#26512;&#30701;&#38142;&#25509;\n    public function parse(Request $request)\n    {\n        $shortCode = $request-&gt;input('code');\n        if (empty($shortCode)) {\n            return response()-&gt;json(['error' =&gt; '&#35831;&#36755;&#20837;&#30701;&#30721;'], 400);\n        }\n\n        $redirect = Redirect::where('short_code', $shortCode)-&gt;first();\n        if (!$redirect) {\n            return response()-&gt;json(['error' =&gt; '&#26080;&#25928;&#30340;&#30701;&#30721;'], 404);\n        }\n\n        $longUrl = $redirect-&gt;short_link()-&gt;long_url;\n        return redirect()-&gt;away($longUrl);\n    }\n}<\/code><\/pre>\n<h3>4. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#26368;&#21518;&#65292;&#37197;&#32622;&#36335;&#30001;&#25991;&#20214; <code>routes\/web.php<\/code>&#65306;<\/p>\n<pre><code class=\"language-php\">use AppHttpControllersShortLinkController;\n\nRoute::get('\/generate', [ShortLinkController::class, 'generate']);\nRoute::get('\/parse\/{code}', [ShortLinkController::class, 'parse']);<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#19978;&#36848;&#27169;&#22411;&#21644;&#25511;&#21046;&#22120;&#65306;<\/p>\n<h4>&#29983;&#25104;&#30701;&#38142;&#25509;<\/h4>\n<pre><code class=\"language-php\">\/\/ &#20351;&#29992; POST &#35831;&#27714;&#21457;&#36865;&#21040; \/generate &#31471;&#28857;\n$longUrl = 'https:\/\/example.com';\n$response = file_get_contents('http:\/\/your-laravel-app.com\/generate?url=' . urlencode($longUrl));\necho json_decode($response)-&gt;short_code; \/\/ &#36755;&#20986;&#30701;&#30721;<\/code><\/pre>\n<h4>&#35299;&#26512;&#30701;&#38142;&#25509;<\/h4>\n<pre><code class=\"language-php\">\/\/ &#20351;&#29992; GET &#35831;&#27714;&#21457;&#36865;&#21040; \/parse &#31471;&#28857;\n$shortCode = 'abc123'; \/\/ &#26367;&#25442;&#20026;&#23454;&#38469;&#30340;&#30701;&#30721;\n$response = file_get_contents('http:\/\/your-laravel-app.com\/parse\/' . $shortCode);\necho $response; \/\/ &#36755;&#20986;&#37325;&#23450;&#21521;&#21518;&#30340; URL<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#20123;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;&#30340; URL &#30701;&#38142;&#25509;&#26381;&#21153;&#12290;&#20320;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#25193;&#23637;&#36825;&#20010;&#31034;&#20363;&#65292;&#20363;&#22914;&#28155;&#21152;&#26356;&#22810;&#30340;&#21151;&#33021;&#12289;&#20248;&#21270;&#24615;&#33021;&#31561;&#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>&#24320;&#22987;&#20351;&#29992;<\/h2><p>URL&#30701;&#32593;&#22336;&#26381;&#21153;&#22312;&#31038;&#20132;&#23186;&#20307;&#21644;&#22312;&#32447;&#33829;&#38144;&#30340;&#26102;&#20195;&#21464;&#24471;&#33267;&#20851;&#37325;&#35201;&#65292;&#23427;&#20204;&#31616;&#21270;&#20102;&#38271;URL&#65292;&#20351;&#23427;&#20204;&#26356;&#23481;&#26131;&#20998;&#20139;&#21644;&#31649;&#29702;&#12290;&#22312;&#36825;&#20010;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#23398;&#20064;&#22914;&#20309;&#20351;&#29992;Laravel&#21644;Eloquent ORM&#26500;&#24314;&#19968;&#20010;&#22522;&#26412;&#30340;URL&#30701;&#32593;&#22336;&#26381;&#21153;&#12290;&#36825;&#21253;&#25324;&#35774;&#32622;&#25968;&#25454;&#24211;&#12289;&#21019;&#24314;&#27169;&#22411;&#20197;&#21450;&#23450;&#20041;&#36335;&#30001;&#12290;<\/p><p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;Laravel&#39033;&#30446;&#65306;<\/p><pre><code>composer create-project --prefer-dist laravel\/laravel url-shortener\n<\/code><\/pre><p>&#29616;&#22312;&#65292;&#35831;&#21019;&#24314;&#19968;&#20010;&#25968;&#25454;&#24211;&#24182;&#37197;&#32622;&#23427;&#12290;<code>.env<\/code>&#35831;&#25552;&#20379;&#25991;&#20214;&#20197;&#36827;&#34892;&#36830;&#25509;&#25805;&#20316;&#12290;<\/p><h2>&#25968;&#25454;&#24211;&#21644;&#36801;&#31227;<\/h2><p>&#25105;&#20204;&#23558;&#39318;&#20808;&#21019;&#24314;&#19968;&#20010;&#36801;&#31227;&#12290;<code>shortened_urls<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#26126;&#30333;&#20320;&#30340;&#24847;&#24605;&#12290;&#20320;&#38656;&#35201;&#25105;&#24110;&#21161;&#32763;&#35793;&#20160;&#20040;&#21527;&#65311;<\/p><pre><code>php artisan make:migration create_shortened_urls_table --create=shortened_urls\n<\/code><\/pre><p>&#35831;&#25552;&#20379;&#38656;&#35201;&#32534;&#36753;&#30340;&#36801;&#31227;&#25991;&#20214;&#30340;&#20855;&#20307;&#36335;&#24452;&#25110;&#21517;&#31216;&#65292;&#20197;&#20415;&#25105;&#36827;&#34892;&#30456;&#24212;&#30340;&#20462;&#25913;&#21644;&#32763;&#35793;&#12290;<code>database\/migrations<\/code>&#28155;&#21152;&#25991;&#20214;&#22841;&#24182;&#28155;&#21152;&#23383;&#27573;&#65306;<\/p><pre><code>Schema::create('shortened_urls', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('code')-&gt;unique();\n    $table-&gt;string('url');\n    $table-&gt;timestamps();\n});\n<\/code><\/pre><p>&#29616;&#22312;&#36801;&#31227;&#25968;&#25454;&#24211;&#65306;<\/p><pre><code>php artisan migrate\n<\/code><\/pre><h2>&#21019;&#24314;&#27169;&#22411;<\/h2><p>&#21019;&#24314;Eloquent&#27169;&#22411;&#65306;<\/p><pre><code>php artisan make:model ShortenedUrl\n<\/code><\/pre><p>&#32534;&#36753;<code>ShortenedUrl<\/code>&#27169;&#22411;&#65306;&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>namespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\n\nclass ShortenedUrl extends Model\n{\n    protected $fillable = ['url', 'code'];\n}\n<\/code><\/pre><h2>&#22788;&#29702;URL&#30701;&#21270;&#36923;&#36753;<\/h2><p>&#25105;&#20204;&#38656;&#35201;&#19968;&#20010;&#26426;&#21046;&#26469;&#20026;&#27599;&#20010;URL&#29983;&#25104;&#21807;&#19968;&#30340;&#20195;&#30721;&#12290;&#20197;&#36825;&#20010;&#20363;&#23376;&#20026;&#20363;&#65306;<\/p><pre><code>public static function boot()\n{\n    parent::boot();\n    self::creating(function ($model) {\n        $model-&gt;code = substr(md5(uniqid(rand(), true)), 0, 6);\n    });\n}\n<\/code><\/pre><p>&#28155;&#21152;&#36825;&#20010;&#21040;&#20320;&#30340;<code>ShortenedUrl<\/code>&#27169;&#22411;&#12290;<\/p><h2>&#36335;&#30001;&#21644;&#25511;&#21046;&#22120;<\/h2><p>&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;Web&#35831;&#27714;&#65306;<\/p><pre><code>php artisan make:controller UrlShortenerController\n<\/code><\/pre><p>&#32534;&#36753;&#12290;<code>UrlShortenerController<\/code>&#65306;<\/p><pre><code>namespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse AppModelsShortenedUrl;\n\nclass UrlShortenerController extends Controller\n{\n    public function store(Request $request)\n    {\n        $request-&gt;validate(['url' =&gt; 'required|url']);\n        $shortenedUrl = ShortenedUrl::create(['url' =&gt; $request-&gt;url]);\n        return response()-&gt;json(['code' =&gt; $shortenedUrl-&gt;code], 201);\n    }\n\n    public function show($code)\n    {\n        $url = ShortenedUrl::where('code', $code)-&gt;firstOrFail();\n        return redirect($url-&gt;url);\n    }\n}\n<\/code><\/pre><p>&#23450;&#20041;&#36335;&#32447;&#65306;<\/p><pre><code>use AppHttpControllersUrlShortenerController;\n\nRoute::post('\/shorten', [UrlShortenerController::class, 'store']);\nRoute::get('\/{code}', [UrlShortenerController::class, 'show']);\n<\/code><\/pre><h2>&#27491;&#22312;&#27979;&#35797;&#25105;&#20204;&#30340;&#26381;&#21153;&#65292;&#35831;&#31245;&#20505;&#12290;<\/h2><p>&#20351;&#29992;<code>curl<\/code>&#25110;&#32773;&#20351;&#29992;&#20687;Postman&#36825;&#26679;&#30340;HTTP&#23458;&#25143;&#31471;&#26469;&#27979;&#35797;&#24744;&#30340;&#26381;&#21153;&#65306;<\/p><pre><code>curl -X POST -F 'url=https:\/\/www.google.com' http:\/\/localhost\/shorten\n<\/code><\/pre><p>&#25910;&#21040;&#65292;&#36825;&#26159;&#25105;&#30340;&#20013;&#25991;&#32763;&#35793;&#65306;&#20320;&#20250;&#25509;&#25910;&#21040;&#19968;&#20010;&#21253;&#21547;&#24744;&#21807;&#19968;&#20195;&#30721;&#30340;JSON&#21709;&#24212;&#65292;&#35813;&#20195;&#30721;&#20250;&#37325;&#23450;&#21521;&#21040;&#21407;&#22987;URL&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#35752;&#35770;&#20102;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;URL&#30701;&#21270;&#26381;&#21153;&#25152;&#38656;&#30340;&#27493;&#39588;&#65292;&#20351;&#29992;Laravel&#21644;Eloquent&#12290;&#24744;&#30340;&#26032;&#26381;&#21153;&#28085;&#30422;&#20102;&#26680;&#24515;&#32452;&#20214;&#65292;&#20363;&#22914;&#36801;&#31227;&#12289;&#27169;&#22411;&#12289;&#36335;&#30001;&#21644;&#25511;&#21046;&#22120;&#12290;&#34429;&#28982;&#31616;&#21333;&#65292;&#20294;&#23427;&#20026;&#26500;&#24314;&#26356;&#22797;&#26434;&#21151;&#33021;&#25552;&#20379;&#20102;&#22522;&#30784;&#65292;&#22914;&#20998;&#26512;&#12289;&#33258;&#23450;&#20041;&#21035;&#21517;&#25110;&#29992;&#25143;&#36523;&#20221;&#39564;&#35777;&#12290;<\/p><p>&#31069;&#20320;&#32534;&#31243;&#24841;&#24555;&#65281;<\/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>&#22312; Laravel &#21644; Eloquent &#20013;&#21019;&#24314;&#19968;&#20010;&#31616;&#21333;&#30340; URL &#30701;&#38142;&#25509;&#26381;&#21153;&#28041;&#21450;&#21040;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>&#23433;&#35013; Laravel\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;&#26412;&#22320;&#35745;&#31639;&#26426;&#19978;&#23433;&#35013; Laravel&#12290;&#20320;&#21487;&#20197;&#20351;&#29992; Composer &#26469;&#23433;&#35013;&#23427;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer create-project --prefer-dist laravel\/laravel url-shortener<\/code><\/pre>\n<ol start=\"2\">\n<li>&#21019;&#24314;&#25968;&#25454;&#24211;&#34920;\n&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#25968;&#25454;&#24211;&#34920;&#26469;&#23384;&#20648;&#25105;&#20204;&#30340; URL &#21644;&#20854;&#23545;&#24212;&#30340;&#30701;&#38142;&#25509;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#23436;&#25104;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan make:model ShortLink\ncd short-link\nphp artisan db:seed --class=ShortLinkSeeder<\/code><\/pre>\n<ol start=\"3\">\n<li>&#23454;&#29616;&#27169;&#22411;&#21644;&#25511;&#21046;&#22120;\n&#29616;&#22312;&#25105;&#20204;&#26377;&#20102;&#25968;&#25454;&#24211;&#34920;&#65292;&#25105;&#20204;&#21487;&#20197;&#23454;&#29616;&#25105;&#20204;&#30340;&#27169;&#22411;&#21644;&#25511;&#21046;&#22120;&#12290;&#22312; <code>app\/Models<\/code> &#30446;&#24405;&#19979;&#65292;&#25105;&#20204;&#21487;&#20197;&#25214;&#21040; <code>ShortLink.php<\/code> &#25991;&#20214;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentSoftDeletes;\n\nclass ShortLink extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = [\n        'short_link',\n        'long_url'\n    ];\n\n    public function getRouteKeyName()\n    {\n        return 'short_link';\n    }\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#25105;&#20204;&#23558;&#23454;&#29616;&#25511;&#21046;&#22120;&#65292;&#20363;&#22914; <code>ShortLinkController.php<\/code>&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllers;\n\nuse AppModelsShortLink;\nuse IlluminateHttpRequest;\n\nclass ShortLinkController extends Controller\n{\n    \/**\n     * Display a listing of the resource.\n     *\n     * @return IlluminateHttpResponse\n     *\/\n    public function index()\n    {\n        $shortLinks = ShortLink::all();\n        return view('short-links.index', compact('shortLinks'));\n    }\n\n    \/**\n     * Show the form for creating a new resource.\n     *\n     * @return IlluminateHttpResponse\n     *\/\n    public function create()\n    {\n        return view('short-links.create');\n    }\n\n    \/**\n     * Store a newly created resource in storage.\n     *\n     * @param  IlluminateHttpRequest  $request\n     * @return IlluminateHttpResponse\n     *\/\n    public function store(Request $request)\n    {\n        $request-&gt;validate([\n            'short_link' =&gt; ['required'],\n            'long_url' =&gt; ['required']\n        ]);\n\n        ShortLink::create($request-&gt;only(['short_link', 'long_url']));\n\n        return redirect()-&gt;route('short-links.index')\n                        -&gt;with('success', '&#30701;&#38142;&#25509;&#24050;&#25104;&#21151;&#28155;&#21152;&#65281;');\n    }\n\n    \/**\n     * Display the specified resource.\n     *\n     * @param  int  $id\n     * @return IlluminateHttpResponse\n     *\/\n    public function show($id)\n    {\n        \/\/\n    }\n\n    \/**\n     * Show the form for editing the specified resource.\n     *\n     * @param  int  $id\n     * @return IlluminateHttpResponse\n     *\/\n    public function edit($id)\n    {\n        $shortLink = ShortLink::findOrFail($id);\n        return view('short-links.edit', compact('shortLink'));\n    }\n\n    \/**\n     * Update the specified resource in storage.\n     *\n     * @param  IlluminateHttpRequest  $request\n     * @param  int  $id\n     * @return IlluminateHttpResponse\n     *\/\n    public function update(Request $request, $id)\n    {\n        $request-&gt;validate([\n            'short_link' =&gt; ['required'],\n            'long_url' =&gt; ['required']\n        ]);\n\n        ShortLink::whereId($id)-&gt;update($request-&gt;only(['short_link', 'long_url']));\n\n        return redirect()-&gt;route('short-links.index')\n                            -&gt;with('success', '&#30701;&#38142;&#25509;&#24050;&#25104;&#21151;&#26356;&#26032;&#65281;');\n    }\n\n    \/**\n     * Remove the specified resource from storage.\n     *\n     * @param  int  $id\n     * @return IlluminateHttpResponse\n     *\/\n    public function destroy($id)\n    {\n        ShortLink::destroy($id);\n\n        return redirect()-&gt;route('short-links.index')\n                            -&gt;with('success', '&#30701;&#38142;&#25509;&#24050;&#25104;&#21151;&#21024;&#38500;&#65281;');\n    }\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>&#37197;&#32622;&#36335;&#30001;\n&#26368;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#37197;&#32622;&#36335;&#30001;&#20197;&#20415;&#22312;&#24212;&#29992;&#31243;&#24207;&#20013;&#35775;&#38382;&#36825;&#20123;&#36164;&#28304;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan route:&#32534;&#36753;<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#24403;&#29992;&#25143;&#23581;&#35797;&#35775;&#38382; <code>\/short-links<\/code> &#36335;&#24452;&#26102;&#65292;&#20182;&#20204;&#23558;&#30475;&#21040;&#19968;&#20010;&#26174;&#31034;&#25152;&#26377;&#30701;&#38142;&#25509;&#30340;&#39029;&#38754;&#12290;&#28857;&#20987;&#25353;&#38062;&#23558;&#37325;&#23450;&#21521;&#21040;&#30701;&#38142;&#25509;&#30340;&#35814;&#32454;&#20449;&#24687;&#39029;&#38754;&#12290;&#28857;&#20987;&ldquo;&#21019;&#24314;&rdquo;&#25353;&#38062;&#23558;&#21521;&#26381;&#21153;&#22120;&#25552;&#20132;&#19968;&#20010; POST &#35831;&#27714;&#65292;&#20197;&#28155;&#21152;&#19968;&#20010;&#26032;&#30340;&#30701;&#38142;&#25509;&#12290;&#28857;&#20987;&ldquo;&#32534;&#36753;&rdquo;&#25353;&#38062;&#23558;&#37325;&#23450;&#21521;&#21040;&#32534;&#36753;&#30701;&#38142;&#25509;&#30340;&#39029;&#38754;&#12290;&#28857;&#20987;&ldquo;&#21024;&#38500;&rdquo;&#25353;&#38062;&#23558;&#20174;&#25968;&#25454;&#24211;&#20013;&#21024;&#38500;&#25351;&#23450;&#30340;&#30701;&#38142;&#25509;&#12290;<\/p>\n<p>&#20197;&#19978;&#23601;&#26159;&#20351;&#29992; Laravel &#21644; Eloquent &#23454;&#29616;&#31616;&#21333; URL &#30701;&#38142;&#25509;&#26381;&#21153;&#30340;&#22522;&#26412;&#36807;&#31243;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22909;&#30340;&#65292;&#19979;&#38754;&#26159;&#19968;&#20010;&#20351;&#29992; Laravel &#21644; Eloquent &#35774;&#35745;&#31616;&#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-859","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\/859","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=859"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=859"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=859"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}