使用可调用参数修改查询

时间:2018-06-30 08:40:53

标签: php laravel laravel-5 eloquent

我正在使用https://github.com/BRACKETS-by-TRIAD/craftable为我的应用生成管理面板。

我有一个属于“组织类型”模型的“组织”模型。

在索引列表中,我希望能够显示“组织类型”名称而不是_id。为此,我必须修改此查询,以急于使用“ with”方法加载关系。

列表的方法签名为:

 public static void main( String[] args )
   {
     try {
      SpringApplication.run( ControllerUndMain.class, args );
           showLogo();
           System.out.println('runs')
        } catch(Exception e){
           showLogo();
           System.out.println('not working')
        }
}

,索引方法是:

public static function processRequestAndGet($request, $columns = array(), $searchIn = null, $modifyQuery = null, $locale = null)

Craftable,提供了一个ModifyQuery方法,但是我不确定如何使用它:

$data = AdminListing::create(Organisation::class)->processRequestAndGet(
        // pass the request with params
            $request,

            // set columns to query
            ['id', 'organisation_type_id', 'name', 'active'],

            // set columns to searchIn
            ['id', 'name']
        );

        if ($request->ajax()) {
            return ['data' => $data];
        }

        return view('admin.organisation.index', ['data' => $data]);

有人可以帮助我使用回调来修改查询,以便我包括相关的表数据吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我遇到了完全相同的问题,我想分享我的做法。

craftable使用processRequestAndGet函数,该函数将预期的可调用查询作为第四参数。因此,当您需要使用该参数而不是尝试直接访问modifyQuery函数时。

$data_r = AdminListing::create(Organisation::class)
    ->processRequestAndGet(
        // pass the request with params
        $request,

        // set columns to query
        ['id', 'organisation_type_id', 'name', 'active'],

        // set columns to searchIn
        ['id', 'name'],

        function($query) use ($request){
            if ($request->has('author_id')) {
                $query->where('author_id', $request->author_id);
            }
        }
    );

您几乎是正确的,只需在processRequestAndGet内传递预期的回调即可。