我需要在laravel策略中立即加载关系。问题是我在yajra-datatable中使用laravel策略,它将逐行加载它(策略)
下面的代码看起来像:
public function create(User $user)
{
$user->load('sections');
$sections = collect($user->sections->toArray())->pluck('name');
return
in_array($user->role_id,[3,4])
&& in_array('Produksi', $sections->toArray())
&& Session::get('productionPlans-branch') !== 'all'
&& Session::get('productionPlans-period') !== 'all';
}
我在yajra数据表中使用它,如下所示:
public function table(Request $request)
{
$query = ProductionPlan::with(['branch','product.category','period'])->orderBy('created_at');
return \Yajra\DataTables\DataTables::of($query)
->addIndexColumn()
->addColumn('action', function($row) {
if ($request->user->can('create', $row)) {
return '<a href="javascript:void(0)" onclick="show('. $row->id .')">Add</a>';
}
})
->rawColumns(['action'])
->make(true);
}
所以每一行都会反复加载关系
我期待更有效的方法,加载他们只是一次,而不是加载的关系,一行一行,我如何才能做到这一点?
更新日期:
我尝试在用户模型上使用访问器来追加与节表的关系
protected $appends = ['sections'];
public function getSectionsAttribute ()
{
return $this->attributes['sections'] = $this->sections()->first();
}
这只对FIRST关系是成功的,我试图删除first()方法,但得到了错误的PDO序列化
Serialization of 'PDO' is not allowed
1条答案
按热度按时间hs1ihplo1#
我认为Laravel策略使用的是调用它的确切对象。因此,$this-〉user-〉can(...)实际上是作为第一个参数传递给create(User $user)策略方法的同一个对象。
在这种情况下,我会尝试在闭包中调用-〉can方法之前加载它。
代码可能如下所示:
然后你还必须记住从策略的create()方法中删除
$user->load('sections');
。这是非常重要的:-)