在laravel背包中的下拉列表中添加自定义值

时间:2017-04-22 11:01:28

标签: laravel laravel-5.4 backpack-for-laravel

我正在使用laravel,并且我有两个名为bundle and 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",
            ]);

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

1 个答案:

答案 0 :(得分: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\Study替换为App\Models\UserStudy

希望它有所帮助。干杯!