laravel - 获取多对多的值以及在 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);
我成功获得了tags
与contact
. 但是我怎样才能得到 alltags
和一个标志,指示其中哪一个是关联的?
我试图阻止获取 all tags
,循环它们并且每次迭代循环 allcontact_tags
并检查是否tag_id
匹配。我想显示带有所有标签的复选框列表并检查关系中的复选框。
解决方案
此代码可以帮助您,但我使用的是 SELECT 多个组件。您可以轻松地调整它以使用 CHECKBOX 组件。
触点型号:
public function tags()
{
return $this->belongsToMany(Tags::class, "contacts_tags", "contact_id", "tag_id");
}
联系人控制器.php
public function edit(Contact $contact)
{
$tags = Tag::all();
return view('contacts.edit',compact('contact', 'tags'));
}
编辑刀片.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 在这里没有用,但如果您验证其他字段,它可以用来更新联系人。
推荐阅读
- java - Resetting DB connection in Spring boot at runtime after getting connection closed
- python - 从python中的多个文件中获取cat和grep并将输出写入文件?
- c - Illegal instruction on executing PROT_EXEC page, created by mmap
- node.js - Retrieving messages from redis stream
- javascript - use js change var str="are you okay" to are| you| okay|
- reactjs - How to use TempData in ASP.NET Core React application
- raspberry-pi - Device communication using MQTT
- python - Printing a list of all the photos in iPhone
- kotlin - Android中的可塑视图
- svg - Install imagemagick with delegates on debian