我还在做一个点赞按钮.这一次,我用Livewire做的,因为它更漂亮.由于缺乏知识,我将这段代码拼凑在一起,它部分起到了作用:点赞/Collection 夹存储在数据库中,点赞时心脏的 colored颜色 会改变,当你只有1个点赞时,也会删除功能.但当你有多个赞并删除/不像其中一个时,所有其他赞都会失go 它们的 colored颜色 ,包括被删除的一个,当你刷新时,只有最后一个被删除,其他的恢复 colored颜色 并仍然在数据库中.这个问题能解决吗?

namespace App\Http\Livewire;

use Livewire\Component;
use Illuminate\Support\Facades\Auth;
use App\Models\Vacature;
use App\Models\Favoriet;
use Illuminate\Contracts\View\View;
use WithPagination;

class Vacatures extends Component
{
    public $orderBy = "Sorteer: Nieuwste Vacatures";
    public $vacids = [];
    public $favoriet;
    public $updatePage = false;

    public function mount()
    {
        if (Auth::id()) {
            $user = Auth::user();
            $this->favoriet = Favoriet::where('user_id', $user->id)->get();
            foreach ($this->favoriet as $this->favoriet) {
                $this->vacids[] = $this->favoriet->vacature_id;
            }
        }
    }

    public function saveFavoriet($id)
    {
        if (Auth::id()) {
            $user = Auth::user();
            $vacature = Vacature::find($id);
            $this->favoriet = new Favoriet;
            $this->favoriet->user_id = $user->id;
            $this->favoriet->vacature_id = $vacature->id;
            $this->favoriet->vacature_naam = $vacature->naam;
            $this->favoriet->beschrijving = $vacature->beschrijving;
            $this->favoriet->save();
            $this->updatePage = false;
            $this->mount();
        } else {
            return redirect('login')->with('message',
                'Log in om je favorieten op te slaan, je kunt ze dan altijd terugvinden in jouw favorieten menu.');
        }
    }

    public function deleteFavoriet()
    {
        $this->favoriet->delete();
        $this->updatePage = true;
    }
}

View

<div class="col-lg-3 d-flex align-items-center justify-content-center">
    <div class="text-center"><a href="{{url('vacature_details',$vac->id)}}" class="buy-btn">Bekijk Vacature</a>
    </div>
</div>
@if(in_array($vac->id, $this->vacids))
    @if($this->updatePage==false)
        <div>
            <a wire:click.prevent="deleteFavoriet()" class="bi bi-heart-fill fa-lg m-2" href=""
               data-tooltip="tooltip" data-placement="top" title="Is al favoriet">
            </a>
            <div>
            </div>
        </div>
    @else
        <div>
            <a wire:click.prevent="saveFavoriet({{ $vac['id'] }})" class="bi bi-heart fa-lg m-2" href=""
               data-tooltip="tooltip" data-placement="top" title="Voeg toe aan favorieten">
            </a>
        </div>
    @endif
@else
    <div>
        <a wire:click.prevent="saveFavoriet({{ $vac['id'] }})" class="bi bi-heart fa-lg m-2" href=""
           data-tooltip="tooltip" data-placement="top" title="Voeg toe aan favorieten">
        </a>
    </div>
@endif
<div class="border"></div>
@endforeach
</div>
</div>
@endif
</div>
</section>

我也试着和用户建立了很多关系,但所有的赞都被一下子删除了.

推荐答案

删除Collection 夹时,您只删除了最后一个Collection 夹,而没有指定要删除哪个Collection 夹.

public function deleteFavoriet($vacatureId)
{
    $user = Auth::user();
    $favoriet = Favoriet::where('user_id', $user->id)
        ->where('vacature_id', $vacatureId)
        ->first();

    if ($favoriet) {
        $favoriet->delete();
    }

    // Reload the favorites
    $this->mount();
}

在您调用deleteFavoriet方法的位置更新Livewire组件:

<a wire:click.prevent="deleteFavoriet({{ $vac['id'] }})" class="bi bi-heart-fill fa-lg m-2" href=""
   data-tooltip="tooltip" data-placement="top" title="Is al favoriet">
</a>

Laravel相关问答推荐

Laravel 9 如何将 url 中的参数从一个控制器传递到另一个控制器?

Laravel Debugbar 中的 Laravel api routes路由

如何获得每种类型的总和

如何在 laravel 5.2 中显示 500 内部服务器错误页面?

调用未定义函数 Illuminate\Encryption\openssl_decrypt()

使用 Eloquent 的 Laravel 块方法

laravel 5中的配置缓存导致找不到视图

验证匹配字符串

禁用Eager的关系

使用 Laravel 将两个模型合并到一个分页查询中,并带有Eager加载的关系

如果 Laravel 中的值不为空,如何验证输入字段

Laravel 验证:数字和整数之间的区别?

获取多列字段?

Laravel 5.4 Vue.JS 无法挂载组件:未定义模板或渲染函数

Laravel 删除集合中的第一项

在 laravel Passport 客户端应用程序中使用访问令牌获取用户数据

在哪里放置 Blade::extend

如果在 Laravel 5.1 中找不到路由,则显示 404 页面

为什么`catch (Exception $e)` 不处理这个`ErrorException`?

以编程方式而不是从 CLI 运行 Laravel 5 seeder