Vue/Inertia.js 不更新数据库中的值
Vue/Inertia.js not updating value in database
我有以下表格:
<form @change="updatePipeline">
<select v-model="pipeline.input_mode">
<option value="text">Text</option>
<option value="html">HTML</option>
<option value="json">JSON</option>
</select>
</form>
@change
正在调用以下内容:
<script setup>
import {useForm} from "@inertiajs/inertia-vue3";
const props = defineProps({
pipeline: {
type: Object,
required: true,
},
});
const form = useForm({
input_mode: props.pipeline.input_mode,
});
const updatePipeline = () => {
form.put(route('pipelines.update', props.pipeline), {
errorBag: 'updatePipeline',
preserveScroll: true,
});
};
该值未在数据库中更新:
public function update(Request $request, Pipeline $pipeline)
{
$pipeline->update(
$request->validate([
'input_mode' => 'required|string|min:3|max:255',
])
);
return redirect()
->route('pipelines.edit', ['pipeline' => $pipeline])
->with('success', 'Pipeline edited successfully.');
}
我做错了什么?
请注意对此答案的第一条评论。这取决于版本
我不是惯性方面的专家,但当你这样做时
$pipeline->update(
$request->validate([
'input_mode' => 'required|string|min:3|max:255',
])
);
它 return 是一个 void
正如你在这里看到的 https://laravel.com/api/5.5/Illuminate/Validation/Validator.html#method_validate
您要找的是:
$request->validate(['input_mode' => 'required|string|min:3|max:255'])
$pipeline->update($request->validated());
validated()
将 return 一组经过验证的项目。
编辑
你的模态 Pipeline
中 $fillables
中有 input_mode
吗?如果不是,那是你的问题
protected $fillables = ['input_mode'];
所以我在这里问了这个问题后不久就想通了。数据库没有被持久化的原因是我在 v-model
属性 上指的是 pipeline
。相反,我应该参考 form
:
<form @change="updatePipeline">
<select v-model="form.input_mode">
<option value="text">Text</option>
<option value="html">HTML</option>
<option value="json">JSON</option>
</select>
</form>
所以,我没有:v-model="pipeline.input_mode"
,而是:v-model="form.input_mode"
。
我有以下表格:
<form @change="updatePipeline">
<select v-model="pipeline.input_mode">
<option value="text">Text</option>
<option value="html">HTML</option>
<option value="json">JSON</option>
</select>
</form>
@change
正在调用以下内容:
<script setup>
import {useForm} from "@inertiajs/inertia-vue3";
const props = defineProps({
pipeline: {
type: Object,
required: true,
},
});
const form = useForm({
input_mode: props.pipeline.input_mode,
});
const updatePipeline = () => {
form.put(route('pipelines.update', props.pipeline), {
errorBag: 'updatePipeline',
preserveScroll: true,
});
};
该值未在数据库中更新:
public function update(Request $request, Pipeline $pipeline)
{
$pipeline->update(
$request->validate([
'input_mode' => 'required|string|min:3|max:255',
])
);
return redirect()
->route('pipelines.edit', ['pipeline' => $pipeline])
->with('success', 'Pipeline edited successfully.');
}
我做错了什么?
请注意对此答案的第一条评论。这取决于版本
我不是惯性方面的专家,但当你这样做时
$pipeline->update(
$request->validate([
'input_mode' => 'required|string|min:3|max:255',
])
);
它 return 是一个 void
正如你在这里看到的 https://laravel.com/api/5.5/Illuminate/Validation/Validator.html#method_validate
您要找的是:
$request->validate(['input_mode' => 'required|string|min:3|max:255'])
$pipeline->update($request->validated());
validated()
将 return 一组经过验证的项目。
编辑
你的模态 Pipeline
中 $fillables
中有 input_mode
吗?如果不是,那是你的问题
protected $fillables = ['input_mode'];
所以我在这里问了这个问题后不久就想通了。数据库没有被持久化的原因是我在 v-model
属性 上指的是 pipeline
。相反,我应该参考 form
:
<form @change="updatePipeline">
<select v-model="form.input_mode">
<option value="text">Text</option>
<option value="html">HTML</option>
<option value="json">JSON</option>
</select>
</form>
所以,我没有:v-model="pipeline.input_mode"
,而是:v-model="form.input_mode"
。