雄辩-访问嵌套函数中的父值

时间:2018-06-29 16:56:53

标签: php laravel laravel-5 eloquent

我正在尝试通过嵌套函数访问父值(发布日期)。

在我的应用程序中,一个用户有很多帖子,每个帖子都与一个产品(课本)相关联。每次有人浏览带有该产品的页面时,都会在product-views表中添加一个新行。

我想返回查看用户产品的累计次数。我已经能够获得所有用户的帖子,然后是相关产品,然后是该产品的所有视图计数。

现在,我想添加另一个where()条件,以仅返回创建帖子后发生的视图。为此,我需要获取发布日期,例如views-> product-> post,同时构建类似于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) {

                    // ===!!! Q !!!=== 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');
                },
            ]);
            //some cleanup
        }])->distinct()->get()->unique('isbn')->pluck('textbook.views_count')->sum();

如何在嵌套函数中向后访问帖子日期?

1 个答案:

答案 0 :(得分:0)

就像乔纳斯(Jonas)在评论中说的那样,每个with()关系都是一个新查询,因此我最终通过产品在帖子和视图之间创建了hasManyThrough()关系。

// getting all of the users available posts
$user = $request->user()->posts()->available()->withCount([

            'views' => function ($q) {

                // ===!!! A !!!=== Fixed  ===!!!===
                ->whereRaw('`date-viewed` >= posts.date');

            },

        ])->distinct()->get()->unique('isbn')->pluck('views_count')->sum();