将数据从 vue.js 传递到 laravel 9
P粉951914381
P粉951914381 2023-08-31 16:37:26
[Vue.js讨论组]
<p>问题:使用 axios 将数据从 vue.js 传递到 laravel 时出现内部服务器错误</p> <p>我创建了新的laravel项目并使用vue安装了breece(php artisan Breeze:安装vue)。然后我创建了一个菜单控制器并渲染了 menu.vue,如下所示:</p> <pre class="brush:php;toolbar:false;">public function index() { $menuItems = Menu::all(); return Inertia::render('Menu', [ 'menuItems' =&gt; $menuItems ]); }</pre> <p><code>Route::get('menu',[MenuController::class,'index']); </code> 现在我创建了 CartController</p> <pre class="brush:php;toolbar:false;">&lt;?php namespace App\Http\Controllers; use App\Models\Cart; use App\Models\Menu; use Illuminate\Http\Request; class CartController extends Controller { public function store(Request $request) { dd(&quot;CONTROLLER&quot;); $menu_id = $request-&gt;input('id'); $menu = Menu::find($menu_id); $cart=new Cart(); $cart-&gt;table=$request-&gt;table; $cart-&gt;menus_id=$menu_id; $response=$cart-&gt;save(); } }</pre> <p>这里我必须存储从menu.vue返回的数据 菜单.vue</p> <pre class="brush:php;toolbar:false;">&lt;script setup&gt; import { Head } from '@inertiajs/vue3'; &lt;/script&gt; &lt;template&gt; &lt;Head title=&quot;Menu&quot; /&gt; &lt;navbar /&gt; &lt;div class=&quot;grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4 mx-20&quot; &gt; &lt;div v-for=&quot;item in menuItems&quot; :key=&quot;item.id&quot;&gt; &lt;div class=&quot;p-6 bg-white rounded-lg shadow-lg&quot;&gt; &lt;img v-bind:src=&quot;'menuItemImage/' + item.image&quot; class=&quot;w-12 h-12&quot; /&gt; &lt;h3 class=&quot;text-lg font-medium leading-tight&quot;&gt; {{ item.name }} &lt;/h3&gt; &lt;button @click=&quot;addToCart(item)&quot; class=&quot;mt-4 bg-blue-500 text-white py-2 px-4 rounded-lg hover:bg-blue-600&quot; &gt; Add &lt;/button&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import navbar from &quot;@/Layouts/NavbarLayout.vue&quot;; import axios from &quot;axios&quot;; export default { name: &quot;Menu&quot;, data() { return {}; }, components: { navbar, }, props: [&quot;menuItems&quot;], methods: { addToCart(item) { console.log(item.id); axios .post(&quot;/cart&quot;, { menu_id: item.id, }) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); }, }, }; &lt;/script&gt;</pre> <p>问题是当这被调用时</p> <pre class="brush:php;toolbar:false;">axios .post(&quot;/cart&quot;, { 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 { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m'; const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel'; createInertiaApp({ title: (title) =&gt; `${title} - ${appName}`, resolve: (name) =&gt; resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')), setup({ el, App, props, plugin }) { return createApp({ render: () =&gt; h(App, props) }) .use(plugin) .use(ZiggyVue, Ziggy) .mount(el); }, progress: { color: '#4B5563', }, });</pre> <p>这是我的app.blade.php</p> <pre class="brush:php;toolbar:false;">&lt;!DOCTYPE html&gt; &lt;html lang=&quot;{{ str_replace('_', '-', app()-&gt;getLocale()) }}&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt; &lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;/title&gt; &lt;!-- Fonts --&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&amp;display=swap&quot;&gt; &lt;!-- Scripts --&gt; @routes @vite(['resources/js/app.js', &quot;resources/js/Pages/{$page['component']}.vue&quot;]) @inertiaHead &lt;/head&gt; &lt;body class=&quot;font-sans antialiased&quot;&gt; @inertia &lt;/body&gt; &lt;/html&gt;</pre> <p>这是在存储/日志文件中<code>[2023-02-08 16:39:49] local.ERROR:SQLSTATE [23000]:完整性约束违规:1048 列'menus_id'不能为空(SQL:插入放入 </code>carts<code> (</code>menus_id<code>, </code>table<code>, </code>updated_at<code>, </code>created_at<code>) 值 (?, ?, 2023-02-08 16:39:49, 2023-02-08 16:39:49)) {"异常":"[对象] (Illuminate\\Database\\QueryException(代码: 23000): SQLSTATE[ 23000]:完整性约束违规:1048 列 'menus_id' 不能为空(SQL:插入 </code>carts<code> (</code>menus_id<code>, </code>table<code>, </code >updated_at<code>, </code>created_at<code>) 值 (?, ?, 2023-02-08 16:39:49, 2023-02-08 16:39:49)) 在 D:\\Trinity \\第七届SEM\\项目工作\\ smart_QR_based_restaurant \\供应商\\ laravel \\框架\\ src \\ Illuminate \\ Database \\ Connection.php:760)[stacktrace] </ code> </ p>
P粉951914381
P粉951914381

全部回复(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();
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号