首页 > 解决方案 > 使用可调用参数修改查询

问题描述

我正在craftable为我的应用程序生成一个管理面板。

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

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

清单的方法签名是:

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

索引方法是:

$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]);

Craftable,提供了一个 modifyQuery 方法,但我不知道如何使用它:

public function index(IndexMovie $request)
    {
        $data = AdminListing::create(Movie::class)
            ->modifyQuery(function($query) use ($request){
                if ($request->has('author_id')) {
                    $query->where('author_id', $request->author_id);
                }
            })
            ->get();

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

标签: phplaravellaravel-5eloquent

解决方案


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

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,瞧。


推荐阅读