laravel - Livewire - 我只能将记录添加到数据透视表 - 通过复选框
问题描述
我只能将记录添加到数据透视表。真的很难从数据透视表中删除一个条目
活线组件
<?php
namespace App\Http\Livewire;
use App\Models\User;
use App\Models\Company;
use Livewire\Component;
use Livewire\WithPagination;
class UserAssignCompanySection extends Component
{
use WithPagination;
public $sortBy = 'id';
public $sortAsc = false;
public $user;
public $companies;
public $search;
public $confirmingCompanyRemoval = false;
public $userCompanies = [];
protected $rules = [
'user.name' => 'required',
'user.email' => 'required',
'user.title' => 'required',
'user.first_name' => 'required',
'user.last_name' => 'nullable',
'user.mobile' => 'nullable',
'user.phone' => 'nullable',
'user.is_customer' => 'boolean',
'user.is_provider' => 'boolean',
'userCompanies' => 'required|array',
];
// Table Sort
public function sortBy($field)
{
if($field == $this->sortBy){
$this->sortAsc = !$this->sortAsc;
}
$this->sortBy = $field;
}
// public function updatedUserCompanies()
// {
// $var1 = array_diff(Company::pluck('id')->toArray(),$this->userCompanies);
// dd(Company::pluck('id')->toArray(), $this->userCompanies);
// dd($var1);
// $this->user->companies()->sync($this->userCompanies);
// }
public function updatedUserCompanies()
{
//dd($this->userCompanies);
$this->user->companies()->sync($this->userCompanies);
}
public function mount(User $user)
{
$this->user = $user;
$this->companies = Company::all();
$this->userCompanies = $user->companies()->pluck('company_id')->toArray();
//dd($this->userCompanies);
}
public function render()
{
//$this->user->companies()->sync($this->userCompanies);
return view('livewire.user-assign-company-section');
}
}
<div>
<div class="grid grid-cols-1 text-left xl:grid-cols-6">
<div class="col-span-3 p-4">
<p class="text-lg underline">Name</p>
<x-jet-input wire:model.defer="user.name" id="name" type="text" disabled class="block w-full mt-1 bg-gray-100" />
<x-jet-input-error for="user.name" class="mt-2" />
<br>
@json($userCompanies);
{{-- @foreach ($userCompanies as $item)
{{ $item }}
@endforeach --}}
@foreach($companies as $company)
<div class="mt-1">
<input wire:model="userCompanies" type="checkbox" value="{{ $company->id }}">
{{ $company->name }} <br>
</div>
@endforeach
<br>
{{-- <a href="{{ url()->previous() }}"><x-jet-button>Back</x-jet-button></a> --}}
<br>
</div>
</div>
</div>
当我单击company_id = 3的复选框时,一个刺被添加到 $this->userCompanies livewire 属性
像这样的东西
[1,2,"3"];
当我取消选中 1 和 2 等 id 时(通过数据库检索的不会被删除)
我认为它试图从基于整数的数组中删除字符串,例如“1”
解决方案
如果属性是数组,则必须将模型声明为数组(使用点表示法)。试试这样的:
@foreach($companies as $i => $company)
<div class="mt-1">
<input wire:model="userCompanies.$i" type="checkbox" value="{{$company->id }}">
{{ $company->name }} <br>
</div>
@endforeach
推荐阅读
- cassandra - 我们可以使用 TLS 证书中的通用名称在 Cassandra 中进行授权吗
- mysql - 每次操作后的 MySQL SUM 和 MIN
- c++ - 包含现有标题的致命错误
- couchdb - 使用 $or 运算符的 Cloudant Query 会发出警告 - “找不到匹配的索引,创建索引以优化查询时间”虽然存在索引?
- tableau-api - 我怎样才能对那些在画面上有一些价值的变量求和?
- java - 通过rest高级客户端在弹性搜索中创建索引内的类型
- java - -bash: import: command not found : command not found Java Compilation Mac Terminal
- swt - Eclipse SWT Shell:getBounds() 似乎返回错误坐标
- python - 依次从多个字符串中获取字符
- swift - 如何在 UITableView Cell 中为 ImageView 添加大小和位置?