Count Multiple Models in Laravel





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I have multiple models: User, Track, Tutorial, Chapter, Lesson, & SolvedLesson.



Below is what I've done to for counting each model.



$data = [
'userCount' => AppUser::count(),
'userRegisteredToday' => AppUser::whereCreatedAt(date('Y-m-d'))->count(),
'trackCount' => AppModelsTrack::count(),
'tutorialCount' => AppModelsTutorial::count(),
'chapterCount' => AppModelsChapter::count(),
'lessonCount' => AppModelsLesson::count(),
'solvedLessonCount' => AppModelsSolvedLesson::count(),
];


Laravel provides relationships and eager loading to efficiently query.
Is there any method to convert the above query into one single query for better performance?










share|improve this question




















  • 2





    Could you also provide the relationship between this models? I think a couple of counts can be avoided..

    – HCK
    Jan 4 at 4:53






  • 1





    what are you trying to achieve. its just the count of each model in dashboard

    – Manojkiran.A
    Jan 4 at 5:23


















0















I have multiple models: User, Track, Tutorial, Chapter, Lesson, & SolvedLesson.



Below is what I've done to for counting each model.



$data = [
'userCount' => AppUser::count(),
'userRegisteredToday' => AppUser::whereCreatedAt(date('Y-m-d'))->count(),
'trackCount' => AppModelsTrack::count(),
'tutorialCount' => AppModelsTutorial::count(),
'chapterCount' => AppModelsChapter::count(),
'lessonCount' => AppModelsLesson::count(),
'solvedLessonCount' => AppModelsSolvedLesson::count(),
];


Laravel provides relationships and eager loading to efficiently query.
Is there any method to convert the above query into one single query for better performance?










share|improve this question




















  • 2





    Could you also provide the relationship between this models? I think a couple of counts can be avoided..

    – HCK
    Jan 4 at 4:53






  • 1





    what are you trying to achieve. its just the count of each model in dashboard

    – Manojkiran.A
    Jan 4 at 5:23














0












0








0








I have multiple models: User, Track, Tutorial, Chapter, Lesson, & SolvedLesson.



Below is what I've done to for counting each model.



$data = [
'userCount' => AppUser::count(),
'userRegisteredToday' => AppUser::whereCreatedAt(date('Y-m-d'))->count(),
'trackCount' => AppModelsTrack::count(),
'tutorialCount' => AppModelsTutorial::count(),
'chapterCount' => AppModelsChapter::count(),
'lessonCount' => AppModelsLesson::count(),
'solvedLessonCount' => AppModelsSolvedLesson::count(),
];


Laravel provides relationships and eager loading to efficiently query.
Is there any method to convert the above query into one single query for better performance?










share|improve this question
















I have multiple models: User, Track, Tutorial, Chapter, Lesson, & SolvedLesson.



Below is what I've done to for counting each model.



$data = [
'userCount' => AppUser::count(),
'userRegisteredToday' => AppUser::whereCreatedAt(date('Y-m-d'))->count(),
'trackCount' => AppModelsTrack::count(),
'tutorialCount' => AppModelsTutorial::count(),
'chapterCount' => AppModelsChapter::count(),
'lessonCount' => AppModelsLesson::count(),
'solvedLessonCount' => AppModelsSolvedLesson::count(),
];


Laravel provides relationships and eager loading to efficiently query.
Is there any method to convert the above query into one single query for better performance?







php laravel eloquent laravel-query-builder






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 4 at 5:53









Karl Hill

3,49132446




3,49132446










asked Jan 4 at 4:47









AslamAslam

139213




139213








  • 2





    Could you also provide the relationship between this models? I think a couple of counts can be avoided..

    – HCK
    Jan 4 at 4:53






  • 1





    what are you trying to achieve. its just the count of each model in dashboard

    – Manojkiran.A
    Jan 4 at 5:23














  • 2





    Could you also provide the relationship between this models? I think a couple of counts can be avoided..

    – HCK
    Jan 4 at 4:53






  • 1





    what are you trying to achieve. its just the count of each model in dashboard

    – Manojkiran.A
    Jan 4 at 5:23








2




2





Could you also provide the relationship between this models? I think a couple of counts can be avoided..

– HCK
Jan 4 at 4:53





Could you also provide the relationship between this models? I think a couple of counts can be avoided..

– HCK
Jan 4 at 4:53




1




1





what are you trying to achieve. its just the count of each model in dashboard

– Manojkiran.A
Jan 4 at 5:23





what are you trying to achieve. its just the count of each model in dashboard

– Manojkiran.A
Jan 4 at 5:23












1 Answer
1






active

oldest

votes


















0














The withCount method allows you to count the number of results for model relationships.



Assuming you've defined a one to many relation between the User and SolvedLesson models:



// you can optionally alias the appended count attribute
$users = User::withCount('solvedLessons as solved_count')->get();

// total users
$users->count()

// iterate users to get the number of solved lessons for each
$users->each(function (User $user) {
// using the alias defined above
echo $user->solved_count;
});


You're not limited to a single relation either, passing an array will get the count for each relation:



$tracks = Track::withCount(['tutorials', 'users'])->get();

// total tracks
$tracks->count()

// access each relation count per track
$tracks->each(function (Track $track) {
echo $track->tutorial_count;
echo $track->user_count;
});





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%2f54033253%2fcount-multiple-models-in-laravel%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    The withCount method allows you to count the number of results for model relationships.



    Assuming you've defined a one to many relation between the User and SolvedLesson models:



    // you can optionally alias the appended count attribute
    $users = User::withCount('solvedLessons as solved_count')->get();

    // total users
    $users->count()

    // iterate users to get the number of solved lessons for each
    $users->each(function (User $user) {
    // using the alias defined above
    echo $user->solved_count;
    });


    You're not limited to a single relation either, passing an array will get the count for each relation:



    $tracks = Track::withCount(['tutorials', 'users'])->get();

    // total tracks
    $tracks->count()

    // access each relation count per track
    $tracks->each(function (Track $track) {
    echo $track->tutorial_count;
    echo $track->user_count;
    });





    share|improve this answer




























      0














      The withCount method allows you to count the number of results for model relationships.



      Assuming you've defined a one to many relation between the User and SolvedLesson models:



      // you can optionally alias the appended count attribute
      $users = User::withCount('solvedLessons as solved_count')->get();

      // total users
      $users->count()

      // iterate users to get the number of solved lessons for each
      $users->each(function (User $user) {
      // using the alias defined above
      echo $user->solved_count;
      });


      You're not limited to a single relation either, passing an array will get the count for each relation:



      $tracks = Track::withCount(['tutorials', 'users'])->get();

      // total tracks
      $tracks->count()

      // access each relation count per track
      $tracks->each(function (Track $track) {
      echo $track->tutorial_count;
      echo $track->user_count;
      });





      share|improve this answer


























        0












        0








        0







        The withCount method allows you to count the number of results for model relationships.



        Assuming you've defined a one to many relation between the User and SolvedLesson models:



        // you can optionally alias the appended count attribute
        $users = User::withCount('solvedLessons as solved_count')->get();

        // total users
        $users->count()

        // iterate users to get the number of solved lessons for each
        $users->each(function (User $user) {
        // using the alias defined above
        echo $user->solved_count;
        });


        You're not limited to a single relation either, passing an array will get the count for each relation:



        $tracks = Track::withCount(['tutorials', 'users'])->get();

        // total tracks
        $tracks->count()

        // access each relation count per track
        $tracks->each(function (Track $track) {
        echo $track->tutorial_count;
        echo $track->user_count;
        });





        share|improve this answer













        The withCount method allows you to count the number of results for model relationships.



        Assuming you've defined a one to many relation between the User and SolvedLesson models:



        // you can optionally alias the appended count attribute
        $users = User::withCount('solvedLessons as solved_count')->get();

        // total users
        $users->count()

        // iterate users to get the number of solved lessons for each
        $users->each(function (User $user) {
        // using the alias defined above
        echo $user->solved_count;
        });


        You're not limited to a single relation either, passing an array will get the count for each relation:



        $tracks = Track::withCount(['tutorials', 'users'])->get();

        // total tracks
        $tracks->count()

        // access each relation count per track
        $tracks->each(function (Track $track) {
        echo $track->tutorial_count;
        echo $track->user_count;
        });






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 4 at 6:21









        DigitalDrifterDigitalDrifter

        8,8682825




        8,8682825
































            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%2f54033253%2fcount-multiple-models-in-laravel%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







            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas