亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 6:可以將布爾值設置為 1 但不能設置為零

Laravel 6:可以將布爾值設置為 1 但不能設置為零

PHP
qq_遁去的一_1 2022-01-14 17:06:03
所以基本上我對我的任務有一個最喜歡的價值。它被命名為“收藏夾”并且有一個布爾值,所以 1/true 或 0/false。(mysql)目前,每一行(一個任務)都有一個字體真棒星,如果收藏為1,它將變成帶有金色文本的fas,因此它會顯示一個金色星。如果收藏為0,它會變遠,這使它成為一個內部空的白色星星。<a href="#" class="del_link text-white"><i class="{{ $task->favorited ? 'text-gold fas' : 'far' }} fa-star"></i></a>它具有del_link觸發 javaScript/jQuery 函數的類。哪個提交<a>父表單$('.del_link').each(function(){    $(this).on('click', function(event){        $(this).parent().submit();    });});現在這是包裹在 <a></a><form method="post" action="{{ route('tasks.update', $task) }}">    @csrf @method('patch')    <input type="hidden" name="favorited" value="{{ $task->favorited ? 0 : 1 }}">    <a href="#" class="del_link text-white"><i class="{{ $task->favorited ? 'text-gold fas' : 'far' }} fa-star"></i></a></form>所以基本上,如果收藏=== 1,則將收藏值設置為0,所以當我提交表單時,我將收藏值設置為0?,F在由于某種原因這不起作用。每當我按下星號以便收藏它時,它都會起作用,但是當我反其道而行之時,它就會被取消收藏;它沒有。這是我的代碼 TaskController.phppublic function update(Request $request, Task $task){    $task->update([       'favorited' => request()->has('favorited')    ]);    return back();}實際上,上面的代碼和方法是我從 Laravel 5.8 臨時視頻中得到的。(Laracasts laravel 教程)它使用復選框而不是使用星號對我有用,但它不能以這種方式工作。我嘗試過使用冗長的 if 語句,如果 request 為 1,我會將其設置為 1。(request = 1 表示隱藏輸入為 1,因此不被收藏)和 else,所以如果為 0,它會將其設置為 0 從而不喜歡它。但在那種情況下,它仍然沒有用。我已經 dd 請求、任務和文本來告訴我我在哪里以及我得到了什么,但無濟于事。謝謝你的幫助
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

當您使用時request()->has('favorited'),它會true在請求包含輸入favorited=1favorited=0(兩種情況)時返回。

它確實適用于復選框,因為當type="checkbox"未選中輸入時,它不會在請求中發送。

當它是 inputtype="hidden"時,favorited將一直出現在請求中。

你應該把它改成 'favorited' => (int)(bool)request()->input('favorited')


查看完整回答
反對 回復 2022-01-14
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

根據Laravel 文檔 $request->has('favorited')檢查favorited請求中是否存在。無論是設置為 0、1 還是任何其他值都不會影響返回值。

相反,使用(bool)$request->input('favorited')應該工作。或者,如果您沒有將favorited屬性轉換為 boolean (bool)$request->input('favorited') ? 1 : 0。

如果這不起作用,則說明請求中的值設置不正確,因此很可能是前端問題。在這種情況下,dd($request->input('favorited'))查看該值是否按預期存在。我沒有立即看到您的視圖和 js 存在問題。


查看完整回答
反對 回復 2022-01-14
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

歡迎來到 Stack Overflow。

您的問題出在前端和后端:

  1. 后端:request()->has('field'); 請求將始終具有此字段,這意味著它的值始終為1,因為您提供了輸入字段。

  2. 前端:您沒有更改輸入的值。

對此有兩個修復: 1. 前端您可以設置 Javascript 以在您按下此鍵時更改輸入值。

  1. 在后端執行與 #1 相同的操作,這樣更容易。

所以,這應該適合你:


// First validate you have that field.

request()->validate([

    'favorited' => ['required'],

]);


// Then set the favorited to opposite of current.

$task->update([

   'favorited' => !$task->favorited // notice the "!" (take oposite value)

]);

編輯:順便說一句,您可以通過刪除隱藏輸入并提交您想要使用的值來擺脫 Javascript,因為它是 0 或 1。


所以:刪除輸入類型=“隱藏”,并從a-href更改為按鈕。


<button name="favorited">

    <i class="{{ $task->favorited ? 'text-gold fas' : 'far' }} fa-star"></i>

</button>

那應該做的事情。


查看完整回答
反對 回復 2022-01-14
  • 3 回答
  • 0 關注
  • 279 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號