GithubHelp home page GithubHelp logo

Comments (3)

Malewik avatar Malewik commented on May 24, 2024 1

Sry i haven't time to test it right now
I can check it closer to the weekend

from eloquentfilter.

Malewik avatar Malewik commented on May 24, 2024

Found solution:
if override function getRelatedFilterInput to

public function getRelatedFilterInput($related)
    {
        $output = [];

        if (array_key_exists($related, $this->relations)) {
            foreach ((array) $this->relations[$related] as $alias => $name) {
                // If the alias is a string that is what we grab from the input
                // Then use the name for the output so we can alias relations
                $keyName = is_string($alias) ? $alias : $name;

                if (array_key_exists("$related.$keyName", $this->input)) {
                    $keyValue = $this->input["$related.$keyName"];

                    if ($this->includeFilterInput($keyName, $keyValue)) {
                        $output[$name] = $keyValue;
                    }
                }
            }
        }

        return $output;
    }

(changed check for array_key_exists from $keyName to "$related.$keyName")
and add to relation array something like:

    public $relations = [
        'user' => ['id' => 'id'],
        'user.profile' => ['id' => 'id'],
    ];

It starts to filter as i want.
So with json like:

{
        "id": 7,
        "user.id": 3,
        "user.profile.id": 5
}

and with relations described above it works
if don't change check for array_key_exists (but keep relations) it's always pass only value from id
but with it's pass value from each to each

P.S.
The reason why i didn't change next check

if ($this->includeFilterInput($keyName, $keyValue)) {
    $output[$name] = $keyValue;
}

bcz in the next function parameter $keyName do nothing only $keyValue:

protected function includeFilterInput($key, $value)
{
    return $value !== '' && $value !== null && ! (is_array($value) && empty($value));
}

from eloquentfilter.

Tucker-Eric avatar Tucker-Eric commented on May 24, 2024

Hmmm, does the following work without that override?

class CourseModelFilter extends ModelFilter
{
    protected $model = Course::class;

    public $relations = [
        'user' => ['user.id' => 'id' , 'user.group.id' => 'group'],
    ];

    public function id(int $id): CourseModelFilter
    {
        return $this->where('id', $id);
    }
}

You should be able to alias the $relations array for a relation in the form of

    public $relations = [
        '<related filter>' => ['<key to expect from input>' => '<key/method to use for related filter>'],
    ];

from eloquentfilter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.