Übergeben Sie Daten von vue.js an Laravel 9
P粉951914381
P粉951914381 2023-08-31 16:37:26
0
1
553
<p>Problem: Interner Serverfehler beim Übergeben von Daten von vue.js an Laravel mit axios</p> <p>Ich habe ein neues Laravel-Projekt erstellt und Breece mit Vue installiert (PHP Artisan Breeze: Vue installieren). Dann habe ich einen Menü-Controller erstellt und menu.vue wie folgt gerendert: </p> <pre class="brush:php;toolbar:false;">public function index() { $menuItems = Menu::all(); return Inertia::render('Menu', [ 'menuItems' => ]); }</pre> <p><code>Route::get('menu',[MenuController::class,'index']); Jetzt habe ich CartController</p> erstellt. <pre class="brush:php;toolbar:false;"><?php Namespace AppHttpControllers; verwenden Sie AppModelsCart; verwenden Sie AppModelsMenu; benutze IlluminateHttpRequest; Die Klasse CartController erweitert Controller { öffentlicher Funktionsspeicher (Request $request) { dd("CONTROLLER"); $menu_id = $request->input('id'); $menu = Menu::find($menu_id); $cart=new Cart(); $cart->table=$request->table; $cart->menus_id=$menu_id; $response=$cart->save(); } }</pre> <p>Hier muss ich die von menu.vue zurückgegebenen Daten speichern menu.vue</p> <pre class="brush:php;toolbar:false;"><script setup> import { Head } from '@inertiajs/vue3'; </script> <Vorlage> <Head title="Menü" <navbar /> <div class="grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4 mx-20" > <div v-for="item in menuItems" :key="item.id"> <div class="p-6 bg-whiterounded-lgshadow-lg"> <img v-bind:src="'menuItemImage/' + item.image" class="w-12 h-12" /> <h3 class="text-lg Font-Medium Leading-tight"> {{ Artikelname }} </h3> <-Taste @click="addToCart(item)" class="mt-4 bg-blue-500 text-white py-2 px-4 abgerundet-lg hover:bg-blue-600" > Hinzufügen </button> </div> </div> </div> </template> <script> Navbar aus „@/Layouts/NavbarLayout.vue“ importieren; Axios aus „Axios“ importieren; Standard exportieren { Name: "Menü", Daten() { zurückkehren {}; }, Komponenten: { Navigationsleiste, }, Requisiten: ["menuItems"], Methoden: { addToCart(item) { console.log(item.id); Axios .post("/cart", { menu_id: item.id, }) .then(Funktion (Antwort) { console.log(response.data); }) .catch(Funktion (Fehler) { console.log(error); }); }, }, }; </script></pre> <p>问题是当这被调用时</p> <pre class="brush:php;toolbar:false;">axios .post("/cart", { menu_id: item.id, })</pre> <p>它给了我这个错误: 错误</p> <p>这是我的 app.js</p> <pre class="brush:php;toolbar:false;">axios import './bootstrap'; import '../css/app.css'; import { createApp, h } from 'vue'; import { createInertiaApp } from '@inertiajs/vue3'; import { discoverPageComponent } aus 'laravel-vite-plugin/inertia-helpers'; import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m'; const appName = window.document.getElementsByTagName('title')[0]?.innerText || „Laravel“; createInertiaApp({ Titel: (Titel) => `${title} - ${appName}`, lösen: (name) => discoverPageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')), setup({ el, App, props, Plugin }) { return createApp({ render: () => h(App, props) }) .use(Plugin) .use(ZiggyVue, Ziggy) .mount(el); }, Fortschritt: { Farbe: '#4B5563', }, });</pre> <p>这是我的app.blade.php</p> <pre class="brush:php;toolbar:false;"><!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <Kopf> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title inertia>{{ config('app.name', 'Laravel') }}</title> <!-- Schriftarten --> <link rel="stylesheet" href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap"> <!-- Skripte --> @routes @vite(['resources/js/app.js', "resources/js/Pages/{$page['component']}.vue"]) @inertiaHead </head> <body class="font-sans antialiased"> @Trägheit </body> </html></pre> <p>Dies befindet sich in der Speicher-/Protokolldatei<code>[2023-02-08 16:39:49] local.FEHLER: SQLSTATE[23000]: Verletzung der Integritätsbeschränkung: 1048 Spalte „menus_id“ darf nicht null sein (SQL: In </code>carts<code> einfügen (</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)) {"Exception":"[Object] (Illuminate\Database\QueryException (code: 23000 ): SQLSTATE[ 23000]: Verletzung der Integritätsbeschränkung: 1048 Spalte „menus_id“ darf nicht null sein (SQL: INSERT into </code>carts<code> (</code>menus_id<code>, < /code>table< ;code>, </code >updated_at<code>, </code>created_at<code>) Wert (?, ?, 08.02.2023 16:39:49, 08.02.2023 16:39 :49)) in D:\Trinity\7th SEM\Project Work\smart_QR_based_restaurant\Suppliers\laravel\Framework\src\Illuminate\Database\Connection.php:760) [stacktrace] </code> ;
P粉951914381
P粉951914381

Antworte allen(1)
P粉373596828

这可能是你的问题,

您正在将此对象作为发布数据传递

{menu_id: item.id}

然后你在控制器中调用一个不存在的输入$request->input('id')

$menu_id = $request->input('id');
$menu = Menu::find($menu_id);

应该是$request->input('menu_id');

但是,再次检查您的日志以查看引发的实际错误

此外,您应该在控制器中添加验证,以确保您传递的 ID 存在于表中

public function store(Request $request) {
    
    $request->validate([
        'menu_id' => 'required|exists:menus,id'
    ]);
    
    
    $menu_id = $request->input('menu_id');
    $menu = Menu::find($menu_id);
    $cart=new Cart();
    $cart->table=$request->table;
    $cart->menus_id=$menu_id;
    $response=$cart->save();
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage