2 回答

TA貢獻1815條經驗 獲得超10個贊
來自文檔: “您也可以使用該create()方法將新模型保存在一行中?!?/p>
您使用該create()方法的方式有點錯誤,因為:“一旦我們使屬性可以批量分配,我們就可以使用 create 方法在數據庫中插入一條新記錄?!?/p>
因此,要么使用該$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());
}
添加回答
舉報