【问题标题】:Form query with pivot table带有数据透视表的表单查询
【发布时间】:2018-05-04 20:03:58
【问题描述】:

在下面的表单中,我的用户与其他用户共享文档访问权限。 如何增加我的选择器以仅显示尚未与此文档共享的用户? DocumentUser 有数据透视表 document_user

 <select type="text" name="user" class="uk-select">
        <option disabled selected>Choose from contacts</option>
        @foreach($company->users as $contact)
           //@if (something)
            <option value="{{ $contact->id }}">{{ $contact->first_name}} {{ $contact->last_name}}</option>
           @andif
        @endforeach
    </select>

文档 = $文档

表格:

用户:

  • 身份证
  • 姓名

文档:

  • 身份证;
  • company_id
  • 姓名

文档用户: - company_id - user_id

【问题讨论】:

  • 用户和文档是什么关系?
  • public function users() { return $this-&gt;belongsToMany(User::class, 'document_user'); }
  • and user ` public function documents() { return $this->hasMany(Document::class, 'document_user'); }`
  • 能否请您将两个表的表结构添加到问题中。我认为您应该在用户中有一个many to many relation hasmany 应该更改为belongs to many
  • 我添加了,请检查

标签: mysql forms laravel


【解决方案1】:

试试这个..

根据您的表结构,我相信您应该有many to many 关系。

用户.php

public function documents()
{
    return $this->belongsToMany(Document::class, 'document_user');
}

xx.blade.php

<select type="text" name="user" class="uk-select">
    <option disabled selected>Choose from contacts</option>
    @foreach($company->users as $contact)
        @if(!in_array($contact->id, $document->users->pluck('id')->toArray()))
            <option value="{{ $contact->id }}">
                {{ $contact->first_name}} {{ $contact->last_name}} 
            </option>
        @endif
    @endforeach
</select>

【讨论】:

  • 用户可以访问许多不同的文档,所以这个解决方案不完整,我需要检查用户用户是否已经与这个文档共享,他的名字不应该在选择选项列表中。
  • 视图中的document变量名是什么?
  • 它是$document
  • 我已经尝试过这种方式,但是不,选择器不显示用户:((
  • @PhilippNoris 将! 添加到条件中。那是一个错字。立即尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2018-11-11
  • 2019-07-22
  • 2015-06-24
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多