1

我正在使用 laravel,并且我有两个名为 bundles 和 study 的表。我在 bundleCrudController 的表单中添加了一个下拉字段。但我只想在下拉列表中添加那些由登录用户创建的研究的值,而不是研究表中的所有数据。

这是我在下拉列表中添加数据的代码 -

  $this->crud->addField([
                'name' => 'studies',
                'label' => 'Studies',
                'type' => 'select2_from_array',
                'options' => $this->Study->getUnallocatedStudies($entryId),
                'allows_null' => false,
                'hint' => 'Search for the studies you would like to add to this bundle',
                'tab' => 'Info',
                'allows_multiple' => true
            ]);

      $this->crud->addColumn([
                'label' => 'Studies',
                'type' => "select_multiple",
                'name' => 'bundle_id',
                'entity' => 'studies',
                'attribute' => 'name',
                'model' => "App\Models\Study",
            ]);

所以请帮我解决问题,只在登录用户创建的下拉列表中添加那些记录,而不是所有记录。谢谢

4

1 回答 1

1

我认为最好的方法是创建一个额外的模型 UserStudy,它:

  • 扩展研究;

  • 具有用于过滤当前用户可以看到的内容的全局范围;

它应该看起来像这样:

<?php

namespace App\Models;

use App\Models\Study;
use Auth;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class UserStudy extends Study
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        // filter out the studies that don't belong to this user
        if (Auth::check()) {
            $user = Auth::user();

            static::addGlobalScope('user_id', function (Builder $builder) use ($user) {
                $builder->where('user_id', $user->id);
            });
        }
    }
}

然后,您将能够在字段定义中使用此 UserStudy 模型,而不是 Study。只需替换App\Models\StudyApp\Models\UserStudy.

希望能帮助到你。干杯!

于 2017-04-25T14:24:24.990 回答