Where clause not filtering












0















In my model I have the following two functions:



public function Children()
{
return $this->hasMany(Menu::class, 'parent_menu_id', 'id');
}

public function ActiveChildren()
{
$securityLevel = Auth()->User()->security_level_id;
$activeChildren = Menu::Children()
->where('active_', TRUE)
->where('security_level_id', $securityLevel);

return $activeChildren;
}


Children() returns a list of all Menu items where their parent_menu_id matches the id of this record. This is used in Nova for setup purposes.



With ActiveChildren() I am trying to create a filtered list of items for the actual menu where active_ = TRUE and security_level_id = security level id of the current user.



But instead, ActiveChildren() returns all menu items instead of the filtered set. ActiveChildren populates an array in the following static function:



public static function Tree()
{
return static::with(implode('.', array_fill(0, 4, 'ActiveChildren')))
->where('menu_type', '=', 'PRT')
->get();
}


That is then loaded via the AppServiceProvider whenever the menu is included in a blade file:



public function boot()
{
view()->composer('desktop.menu.parent', function ($view) {
$items = Menu::Tree();
$view->withItems($items);
});
}


All this works fine, just the menu items are not filtered, any ideas?










share|improve this question





























    0















    In my model I have the following two functions:



    public function Children()
    {
    return $this->hasMany(Menu::class, 'parent_menu_id', 'id');
    }

    public function ActiveChildren()
    {
    $securityLevel = Auth()->User()->security_level_id;
    $activeChildren = Menu::Children()
    ->where('active_', TRUE)
    ->where('security_level_id', $securityLevel);

    return $activeChildren;
    }


    Children() returns a list of all Menu items where their parent_menu_id matches the id of this record. This is used in Nova for setup purposes.



    With ActiveChildren() I am trying to create a filtered list of items for the actual menu where active_ = TRUE and security_level_id = security level id of the current user.



    But instead, ActiveChildren() returns all menu items instead of the filtered set. ActiveChildren populates an array in the following static function:



    public static function Tree()
    {
    return static::with(implode('.', array_fill(0, 4, 'ActiveChildren')))
    ->where('menu_type', '=', 'PRT')
    ->get();
    }


    That is then loaded via the AppServiceProvider whenever the menu is included in a blade file:



    public function boot()
    {
    view()->composer('desktop.menu.parent', function ($view) {
    $items = Menu::Tree();
    $view->withItems($items);
    });
    }


    All this works fine, just the menu items are not filtered, any ideas?










    share|improve this question



























      0












      0








      0








      In my model I have the following two functions:



      public function Children()
      {
      return $this->hasMany(Menu::class, 'parent_menu_id', 'id');
      }

      public function ActiveChildren()
      {
      $securityLevel = Auth()->User()->security_level_id;
      $activeChildren = Menu::Children()
      ->where('active_', TRUE)
      ->where('security_level_id', $securityLevel);

      return $activeChildren;
      }


      Children() returns a list of all Menu items where their parent_menu_id matches the id of this record. This is used in Nova for setup purposes.



      With ActiveChildren() I am trying to create a filtered list of items for the actual menu where active_ = TRUE and security_level_id = security level id of the current user.



      But instead, ActiveChildren() returns all menu items instead of the filtered set. ActiveChildren populates an array in the following static function:



      public static function Tree()
      {
      return static::with(implode('.', array_fill(0, 4, 'ActiveChildren')))
      ->where('menu_type', '=', 'PRT')
      ->get();
      }


      That is then loaded via the AppServiceProvider whenever the menu is included in a blade file:



      public function boot()
      {
      view()->composer('desktop.menu.parent', function ($view) {
      $items = Menu::Tree();
      $view->withItems($items);
      });
      }


      All this works fine, just the menu items are not filtered, any ideas?










      share|improve this question
















      In my model I have the following two functions:



      public function Children()
      {
      return $this->hasMany(Menu::class, 'parent_menu_id', 'id');
      }

      public function ActiveChildren()
      {
      $securityLevel = Auth()->User()->security_level_id;
      $activeChildren = Menu::Children()
      ->where('active_', TRUE)
      ->where('security_level_id', $securityLevel);

      return $activeChildren;
      }


      Children() returns a list of all Menu items where their parent_menu_id matches the id of this record. This is used in Nova for setup purposes.



      With ActiveChildren() I am trying to create a filtered list of items for the actual menu where active_ = TRUE and security_level_id = security level id of the current user.



      But instead, ActiveChildren() returns all menu items instead of the filtered set. ActiveChildren populates an array in the following static function:



      public static function Tree()
      {
      return static::with(implode('.', array_fill(0, 4, 'ActiveChildren')))
      ->where('menu_type', '=', 'PRT')
      ->get();
      }


      That is then loaded via the AppServiceProvider whenever the menu is included in a blade file:



      public function boot()
      {
      view()->composer('desktop.menu.parent', function ($view) {
      $items = Menu::Tree();
      $view->withItems($items);
      });
      }


      All this works fine, just the menu items are not filtered, any ideas?







      php laravel laravel-5






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 21 '18 at 7:34









      barbsan

      2,43631223




      2,43631223










      asked Nov 20 '18 at 22:02









      C. GillC. Gill

      238




      238
























          3 Answers
          3






          active

          oldest

          votes


















          1














          It looks like you need to update your ActiveChildren() relation:



          public function ActiveChildren()
          {
          $securityLevel = Auth()->User()->security_level_id;

          /* $activeChildren = Menu::Children()
          * ->where('active_', TRUE)
          * ->where('security_level_id', $securityLevel);
          *
          * return $activeChildren;
          */
          return $this->Children() // switch Menu::Children() to $this->Children()
          ->where('active_', TRUE)
          ->where('security_level_id', $securityLevel);
          }





          share|improve this answer


























          • Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

            – miken32
            Nov 21 '18 at 2:29








          • 1





            @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

            – Peter
            Nov 21 '18 at 2:42











          • Agreed. It took me a while to see the change here.

            – adam
            Nov 21 '18 at 2:43











          • @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

            – C. Gill
            Nov 21 '18 at 13:22








          • 1





            @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

            – Peter
            Nov 21 '18 at 18:44





















          1














          try this:



          Appmodel_name::where('active_',TRUE)->where('security_level_id', $securityLevel);





          share|improve this answer
























          • As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

            – Nico Haase
            Nov 21 '18 at 7:31



















          0














          After some more investigation, I have found the issue to be in my blade code.



          I still referenced $item['children'] instead of $item['activechildren']



          <li>{{ $item['menu_text'] }}</li>
          @if (count($item['activechildren']) > 0)
          <ul>
          @foreach($item['activechildren'] as $item)
          @include('desktop.menu.children', $item)
          @endforeach
          </ul>
          @endif


          Why did $item['children'] still work? Why wasn't this throwing an error?






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402258%2fwhere-clause-not-filtering%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            It looks like you need to update your ActiveChildren() relation:



            public function ActiveChildren()
            {
            $securityLevel = Auth()->User()->security_level_id;

            /* $activeChildren = Menu::Children()
            * ->where('active_', TRUE)
            * ->where('security_level_id', $securityLevel);
            *
            * return $activeChildren;
            */
            return $this->Children() // switch Menu::Children() to $this->Children()
            ->where('active_', TRUE)
            ->where('security_level_id', $securityLevel);
            }





            share|improve this answer


























            • Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

              – miken32
              Nov 21 '18 at 2:29








            • 1





              @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

              – Peter
              Nov 21 '18 at 2:42











            • Agreed. It took me a while to see the change here.

              – adam
              Nov 21 '18 at 2:43











            • @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

              – C. Gill
              Nov 21 '18 at 13:22








            • 1





              @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

              – Peter
              Nov 21 '18 at 18:44


















            1














            It looks like you need to update your ActiveChildren() relation:



            public function ActiveChildren()
            {
            $securityLevel = Auth()->User()->security_level_id;

            /* $activeChildren = Menu::Children()
            * ->where('active_', TRUE)
            * ->where('security_level_id', $securityLevel);
            *
            * return $activeChildren;
            */
            return $this->Children() // switch Menu::Children() to $this->Children()
            ->where('active_', TRUE)
            ->where('security_level_id', $securityLevel);
            }





            share|improve this answer


























            • Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

              – miken32
              Nov 21 '18 at 2:29








            • 1





              @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

              – Peter
              Nov 21 '18 at 2:42











            • Agreed. It took me a while to see the change here.

              – adam
              Nov 21 '18 at 2:43











            • @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

              – C. Gill
              Nov 21 '18 at 13:22








            • 1





              @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

              – Peter
              Nov 21 '18 at 18:44
















            1












            1








            1







            It looks like you need to update your ActiveChildren() relation:



            public function ActiveChildren()
            {
            $securityLevel = Auth()->User()->security_level_id;

            /* $activeChildren = Menu::Children()
            * ->where('active_', TRUE)
            * ->where('security_level_id', $securityLevel);
            *
            * return $activeChildren;
            */
            return $this->Children() // switch Menu::Children() to $this->Children()
            ->where('active_', TRUE)
            ->where('security_level_id', $securityLevel);
            }





            share|improve this answer















            It looks like you need to update your ActiveChildren() relation:



            public function ActiveChildren()
            {
            $securityLevel = Auth()->User()->security_level_id;

            /* $activeChildren = Menu::Children()
            * ->where('active_', TRUE)
            * ->where('security_level_id', $securityLevel);
            *
            * return $activeChildren;
            */
            return $this->Children() // switch Menu::Children() to $this->Children()
            ->where('active_', TRUE)
            ->where('security_level_id', $securityLevel);
            }






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 21 '18 at 2:48

























            answered Nov 21 '18 at 2:18









            PeterPeter

            8841213




            8841213













            • Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

              – miken32
              Nov 21 '18 at 2:29








            • 1





              @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

              – Peter
              Nov 21 '18 at 2:42











            • Agreed. It took me a while to see the change here.

              – adam
              Nov 21 '18 at 2:43











            • @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

              – C. Gill
              Nov 21 '18 at 13:22








            • 1





              @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

              – Peter
              Nov 21 '18 at 18:44





















            • Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

              – miken32
              Nov 21 '18 at 2:29








            • 1





              @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

              – Peter
              Nov 21 '18 at 2:42











            • Agreed. It took me a while to see the change here.

              – adam
              Nov 21 '18 at 2:43











            • @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

              – C. Gill
              Nov 21 '18 at 13:22








            • 1





              @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

              – Peter
              Nov 21 '18 at 18:44



















            Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

            – miken32
            Nov 21 '18 at 2:29







            Can you clarify what you changed, and why it made a difference? This will make the answer more valuable to both OP and future visitors. (BTW using the auth() helper is is a perfectly valid way to get the auth object without having to declare use /Illuminate/Support/Facades/Auth or whatever. But your change to the second line was definitely needed.)

            – miken32
            Nov 21 '18 at 2:29






            1




            1





            @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

            – Peter
            Nov 21 '18 at 2:42





            @miken32 Thanks for the tip on the auth() helper ... it was the upper case function/method names that were looking wrong to me, but apparently that is valid in PHP.

            – Peter
            Nov 21 '18 at 2:42













            Agreed. It took me a while to see the change here.

            – adam
            Nov 21 '18 at 2:43





            Agreed. It took me a while to see the change here.

            – adam
            Nov 21 '18 at 2:43













            @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

            – C. Gill
            Nov 21 '18 at 13:22







            @Peter, thanks for the help, this solved my issue. I have also corrected my usage of upper case in function names. Still learning laravel/php

            – C. Gill
            Nov 21 '18 at 13:22






            1




            1





            @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

            – Peter
            Nov 21 '18 at 18:44







            @C.Gill Laravel Models have some getters that will load the relation if it exists on the Model, even if it isn't loaded yet. So if doesn't behave like an array where you would get an undefined index error when accessing a key that hadn't been set ... even though you are using array style accessors like $model['property'] to get the data.

            – Peter
            Nov 21 '18 at 18:44















            1














            try this:



            Appmodel_name::where('active_',TRUE)->where('security_level_id', $securityLevel);





            share|improve this answer
























            • As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

              – Nico Haase
              Nov 21 '18 at 7:31
















            1














            try this:



            Appmodel_name::where('active_',TRUE)->where('security_level_id', $securityLevel);





            share|improve this answer
























            • As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

              – Nico Haase
              Nov 21 '18 at 7:31














            1












            1








            1







            try this:



            Appmodel_name::where('active_',TRUE)->where('security_level_id', $securityLevel);





            share|improve this answer













            try this:



            Appmodel_name::where('active_',TRUE)->where('security_level_id', $securityLevel);






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 21 '18 at 5:11









            PHP GeekPHP Geek

            1,3761718




            1,3761718













            • As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

              – Nico Haase
              Nov 21 '18 at 7:31



















            • As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

              – Nico Haase
              Nov 21 '18 at 7:31

















            As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

            – Nico Haase
            Nov 21 '18 at 7:31





            As this looks nearly the same as the query given in ActiveChildren, can you explain why this one might solve the problem? What was wrong with the original query?

            – Nico Haase
            Nov 21 '18 at 7:31











            0














            After some more investigation, I have found the issue to be in my blade code.



            I still referenced $item['children'] instead of $item['activechildren']



            <li>{{ $item['menu_text'] }}</li>
            @if (count($item['activechildren']) > 0)
            <ul>
            @foreach($item['activechildren'] as $item)
            @include('desktop.menu.children', $item)
            @endforeach
            </ul>
            @endif


            Why did $item['children'] still work? Why wasn't this throwing an error?






            share|improve this answer




























              0














              After some more investigation, I have found the issue to be in my blade code.



              I still referenced $item['children'] instead of $item['activechildren']



              <li>{{ $item['menu_text'] }}</li>
              @if (count($item['activechildren']) > 0)
              <ul>
              @foreach($item['activechildren'] as $item)
              @include('desktop.menu.children', $item)
              @endforeach
              </ul>
              @endif


              Why did $item['children'] still work? Why wasn't this throwing an error?






              share|improve this answer


























                0












                0








                0







                After some more investigation, I have found the issue to be in my blade code.



                I still referenced $item['children'] instead of $item['activechildren']



                <li>{{ $item['menu_text'] }}</li>
                @if (count($item['activechildren']) > 0)
                <ul>
                @foreach($item['activechildren'] as $item)
                @include('desktop.menu.children', $item)
                @endforeach
                </ul>
                @endif


                Why did $item['children'] still work? Why wasn't this throwing an error?






                share|improve this answer













                After some more investigation, I have found the issue to be in my blade code.



                I still referenced $item['children'] instead of $item['activechildren']



                <li>{{ $item['menu_text'] }}</li>
                @if (count($item['activechildren']) > 0)
                <ul>
                @foreach($item['activechildren'] as $item)
                @include('desktop.menu.children', $item)
                @endforeach
                </ul>
                @endif


                Why did $item['children'] still work? Why wasn't this throwing an error?







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 21 '18 at 17:09









                C. GillC. Gill

                238




                238






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402258%2fwhere-clause-not-filtering%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()