获取多对多值,并在 laravel 中选择了哪些值
get many to many values and which of them are selected in laravel
Contacts:
id
name
Tags:
id
name
ContactTags:
contact_id
tag_id
在联系人模型中:
public function tags()
{
return $this->belongsToMany(Tags::class, "contacts_tags", "contact_id", "tag_id");
}
所以如果我这样做
$contact = Contacts::findOrFail($id);
dd($contact->tags);
我成功获取了与 contact
关联的 tags
。但是我怎样才能得到所有 tags
和一个标志,指示其中一个是关联的?
我试图阻止获取所有 tags
,循环它们并在每次迭代中循环所有 contact_tags
并检查 tag_id
是否匹配。我想显示包含所有标签的复选框列表并检查关系中的复选框。
此代码可以为您提供帮助,但我使用的是 SELECT 多组件。您可以轻松调整它以使用 CHECKBOX 组件。
联系人模型:
public function tags()
{
return $this->belongsToMany(Tags::class, "contacts_tags", "contact_id", "tag_id");
}
ContactController.php
public function edit(Contact $contact)
{
$tags = Tag::all();
return view('contacts.edit',compact('contact', 'tags'));
}
edit.blade.php
<div class="row">
<div class="col">
<div class="form-group">
<strong>Tags:</strong>
<select name="tags_id[]" multiple>
@foreach ($tags as $tag)
@if( $contact->tags->contains($tag) )
<option value="{{ $tag->id }}" selected>{{ $tag->name }}</option>
@else
<option value="{{ $tag->id }}">{{ $tag->name }}</option>
@endif
@endforeach
</select>
</div>
</div>
</div>
更新在 ContactController.php
public function update(Request $request, Post $contact)
{
$validatedData = $request->validate([
'tags_id' => ['array'],
]);
$contact->update($request->all());
$contact->tags()->sync($validatedData['tags_id']);
return redirect()->route('contact.index')->with('success', 'Contact successfully updated!');
}
验证只是一个例子。 $validatedData 在这里没有用处,但如果您验证其他字段,它可用于更新联系人。
Contacts:
id
name
Tags:
id
name
ContactTags:
contact_id
tag_id
在联系人模型中:
public function tags()
{
return $this->belongsToMany(Tags::class, "contacts_tags", "contact_id", "tag_id");
}
所以如果我这样做
$contact = Contacts::findOrFail($id);
dd($contact->tags);
我成功获取了与 contact
关联的 tags
。但是我怎样才能得到所有 tags
和一个标志,指示其中一个是关联的?
我试图阻止获取所有 tags
,循环它们并在每次迭代中循环所有 contact_tags
并检查 tag_id
是否匹配。我想显示包含所有标签的复选框列表并检查关系中的复选框。
此代码可以为您提供帮助,但我使用的是 SELECT 多组件。您可以轻松调整它以使用 CHECKBOX 组件。
联系人模型:
public function tags()
{
return $this->belongsToMany(Tags::class, "contacts_tags", "contact_id", "tag_id");
}
ContactController.php
public function edit(Contact $contact)
{
$tags = Tag::all();
return view('contacts.edit',compact('contact', 'tags'));
}
edit.blade.php
<div class="row">
<div class="col">
<div class="form-group">
<strong>Tags:</strong>
<select name="tags_id[]" multiple>
@foreach ($tags as $tag)
@if( $contact->tags->contains($tag) )
<option value="{{ $tag->id }}" selected>{{ $tag->name }}</option>
@else
<option value="{{ $tag->id }}">{{ $tag->name }}</option>
@endif
@endforeach
</select>
</div>
</div>
</div>
更新在 ContactController.php
public function update(Request $request, Post $contact)
{
$validatedData = $request->validate([
'tags_id' => ['array'],
]);
$contact->update($request->all());
$contact->tags()->sync($validatedData['tags_id']);
return redirect()->route('contact.index')->with('success', 'Contact successfully updated!');
}
验证只是一个例子。 $validatedData 在这里没有用处,但如果您验证其他字段,它可用于更新联系人。