vendredi 29 juin 2018

Eloquent - access parent value in nested function

I'm trying to access the parent value, the posts date, in a nested function.

In my application, a user has many posts, with each post being associated to a product (textbook). Each time someone views a page with the product, a new row is added to the product-views table.

I want to return the cumulative amount of times the users products have been seen. I've been able to get all the users posts, then the associated product, and then the count of all the views of that product within the last year, at the location-viewed or, if no location was set, then anywhere.

Now I'd like to add another where() condition to only return views that have occured after the post was created. To do so, I need to get the posts date, e.g. views->product->post, while constructing the query like user->posts->product->views.

    // getting all of the users available posts
    $user = $request->user()->posts()->available()->with([
        // with the textbook (product) associated with the post
        'textbook' => function ($q) {
            // get the count of textbook-page views
            return $q->withCount([
                // from the related table views
                'views' => function ($q) {
                    // limit results to 'in the past month'
                    $q->whereRaw('`date-viewed` >= DATE_SUB(NOW(),INTERVAL 1 MONTH)')

                    // ===!!! now what? !!!=== How do I access the posts (parent (grandparent?)) date, so that I only select the rows that have been viewed after the post was created  ===!!!===
                        ->where('date-viewed', '>=', 'posts.date')

                    // ignore the page views the user has generated
                        ->where('user-id', "!=", Auth::user()->{'user-id'})->where(function ($query) {
                        // limit to on-place, or not
                        $query->where('uni-viewed', Auth::user()->{'uni-id'})->orWhere('uni-viewed', null);
                    });
                },
            ]);
            //some cleanup
        }])->distinct()->get()->unique('isbn')->pluck('textbook.views_count')->sum();

How do I go backwards in a nested function to access the posts date?



from Newest questions tagged laravel-5 - Stack Overflow https://ift.tt/2tHdBSq
via IFTTT

Aucun commentaire:

Enregistrer un commentaire