2 回答
TA贡献1815条经验 获得超10个赞
来自文档: “您也可以使用该create()方法将新模型保存在一行中。”
您使用该create()方法的方式有点错误,因为:“一旦我们使属性可以批量分配,我们就可以使用 create 方法在数据库中插入一条新记录。”
因此,要么使用该$country->save();方法而不是return $country您在代码中使用的方法,要么使用更好的方法,使您的Country Model中的字段可填充(可批量分配),例如:
class Country extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['country_code', 'country_name'];
}
然后在你的控制器中你可以使用:
public function postdata(Request $request)
{
$country = Country::create([
'country_code' => $request->get('country_code'),
'country_name' => $request->get('country_name'),
]);
// return $country; // this one is not needed at all
}
该create()方法返回保存的模型实例:
链接到文档: https ://laravel.com/docs/7.x/eloquent#mass-assignment
现在,再看一下您的代码,绝对不可能没有错误(在您的浏览器控制台中),因为我没有看到随您的请求发送的任何CSRF 令牌,而且该XMLHttpRequest.send()方法不会将您的数据传递给您的 Laravel控制器,因为数据必须采用特定格式。
因此,请确保您拥有 CSRF 令牌。最简单的方法是将其包含在您的html head喜欢中:
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
</head>
然后令牌也必须包含在 Javascript 脚本中。您将在下面的脚本中找到它。
而且由于您要发送的数据看起来像一个关联的数据数组,因此它应该包含在FormData对象中(作为该send()方法的适当格式),这样您就不会遇到数据格式和获取数据的问题在您的控制器中。所以它会按原样工作。您的脚本应如下所示:
<script>
function xml2() {
var xhttp = new XMLHttpRequest();
let token = document.querySelector('meta[name="csrf-token"]').content;
xhttp.open("POST", "/sekai_adminlte3_rnd/api/rnd/postdata", true);
xhttp.setRequestHeader('X-CSRF-TOKEN', token);
var singlevar = new FormData;
singlevar.append('country_name', 'Indonesia');
singlevar.append('country_code', 'ID');
xhttp.send(singlevar);
}
</script>
我希望您可以通过上述改进使其工作。如果您的路由和网址都可以,它必须工作。
TA贡献1864条经验 获得超2个赞
像这样试试
try{
$country = new Country();
$country->country_code = $request->get('country_code');
$country->country_name = $request->get('country_name');
$country->save();
}
catch(\Exception $e){
dd($e->getMessage());
}
添加回答
举报