我正在使用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
答案 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
。
希望它有所帮助。干杯!