<p>問題: axios</p> を使用して vue.js から laravel にデータを渡すときに内部サーバー エラーが発生します。
<p>新しいlaravelプロジェクトを作成し、vueを使用してbreeceをインストールしました(phpArtisan Breeze:vueのインストール)。次に、メニュー コントローラーを作成し、次のように menu.vue をレンダリングしました。
<pre class="brush:php;toolbar:false;">パブリック関数 Index()
{
$menuItems = メニュー::all();
return Inertia::render('メニュー', [
'menuItems' => $menuItems
]);
}</pre>
<p><code>Route::get('menu',[MenuController::class,'index']); </code>
CartController</p> を作成しました。
<pre class="brush:php;toolbar:false;"><?php
名前空間 App\Http\Controllers;
App\Models\Cart を使用します。
App\Models\Menu を使用します。
Illuminate\Http\Request を使用します。
クラス CartController はコントローラーを拡張します
{
パブリック関数ストア(リクエスト $request)
{
dd("コントローラー");
$menu_id = $request->input('id');
$menu = メニュー::find($menu_id);
$cart=新しいカート();
$cart->table=$request->table;
$cart->menus_id=$menu_id;
$response=$cart->save();
}
}</pre>
<p>ここでは、menu.vue から返されたデータを保存する必要があります。
menu.vue</p>
<pre class="brush:php;toolbar:false;"><スクリプトのセットアップ>
import { Head } から '@inertiajs/vue3';
</スクリプト>
<テンプレート>
<head title="メニュー" />
<ナビゲーションバー />
<div v-for="menuItems の項目" :key="item.id">
<div class="p-6 bg-whiterounded-lgshadow-lg">
<画像
v-bind:src="'menuItemImage/' item.image"
クラス= "w-12 h-12"
/>
<h3 class="text-lg font-medium leading-tight">
{{ 項目名 }}
</h3>
<ボタン
@click="addToCart(item)"
class="mt-4 bg-blue-500 text-white py-2 px-4rounded-lg hover:bg-blue-600"
>
追加
</ボタン>
</div>
</div>
</div>
</テンプレート>
<スクリプト>
「@/Layouts/NavbarLayout.vue」からナビゲーションバーをインポートします;
"axios" から axios をインポートします。
デフォルトのエクスポート {
名前: 「メニュー」、
データ() {
戻る {};
}、
コンポーネント: {
ナビゲーションバー、
}、
小道具: ["menuItems"]、
メソッド: {
addToCart(item) {
console.log(アイテム.id);
アクシオス
.post("/カート", {
menu_id: item.id、
})
.then(関数 (応答) {
コンソール.ログ(応答.データ);
})
.catch(関数 (エラー) {
コンソール.ログ(エラー);
});
}、
}、
};
</script></pre>
<p>問題は、これがいつ呼び出されるかです</p>
<pre class="brush:php;toolbar:false;">axios
.post("/カート", {
menu_id: item.id、
})</pre>
<p>このエラーが発生しました:
エラー</p>
<p>これは私の app.js です</p>
<pre class="brush:php;toolbar:false;">axios
インポート './ブートストラップ';
インポート '../css/app.css';
import { createApp, h } から 'vue';
import { createInertiaApp } から '@inertiajs/vue3';
import { replacePageComponent } から 'laravel-vite-plugin/inertia-helpers';
import { ZiggyVue } から '../../vendor/tightenco/ziggy/dist/vue.m';
const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
createInertiaApp({
title: (title) => `${title} - ${appName}`,
solve: (name) =>solvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
setup({ エル、アプリ、小道具、プラグイン }) {
return createApp({ render: () => h(App, props) })
.use(プラグイン)
.use(ZiggyVue、ジギー)
.mount(el);
}、
進捗: {
色: '#4B5563'、
}、
});</pre>
<p>これは私の app.blade.php</p>
<pre class="brush:php;toolbar:false;"><!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}""
<頭>
<meta charset="utf-8">
<メタ名="ビューポート"コンテンツ="幅=デバイス幅、初期スケール=1""
<タイトルの慣性>{{ config('app.name', 'Laravel') }}</title>
<!-- フォント -->
<link rel="stylesheet" href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap">
<!-- スクリプト -->
@ルート
@vite(['resources/js/app.js', "resources/js/Pages/{$page['component']}.vue"])
@慣性ヘッド
</head>
<body class="font-sans antialiased">
@慣性
</ボディ>
</html></pre>
<p>これはストレージ/ログ ファイルにあります<code>[2023-02-08 16:39:49] local.ERROR: SQLSTATE[23000]: 整合性制約違反: 1048 列 'menus_id' を null にすることはできません (SQL: </code>カートに挿入<code> (</code>menus_id<code>、</code>table<code>、</code>updated_at<code>、</code> ;created_at<code> ;) value(?, ?, 2023-02-08 16:39:49, 2023-02-08 16:39:49)) {"例外":"[オブジェクト] (Illuminate\\Database\ \QueryException(Code : 23000): SQLSTATE[ 23000]: 整合性制約違反: 1048 列 'menus_id' を null にすることはできません (SQL: </code>カート<code> に INSERT (</code>menus_id<code>, </code> ;table<code>, </code >updated_at<code>, </code>created_at<code>) value(?, ?, 2023-02-08 16:39:49, 2023-02-08 16 :39:49)) D:\Trinity\7th SEM\Project Work\smart_QR_based_restaurant\\Supplier\\laravel\\Framework\\src\\Illuminate\\Database\\ Connection.php:760) [スタックトレース] < /コード> </p>
これはあなたの問題かもしれません、
このオブジェクトを投稿データとして渡します
リーリー次に、存在しないコントローラーの入力を呼び出します
リーリー$request->input('id')
は
である必要があります。$request->input('menu_id');
ただし、ログを再度チェックして、実際に発生したエラーを確認してください。
さらに、コントローラーに検証を追加して、渡した ID がテーブルに存在することを確認する必要があります
リーリー