Eloquent - доступ к родительскому значению во вложенной функции. - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь получить доступ к родительскому значению, дате публикации во вложенной функции.

В моем приложении у пользователя много постов, каждый из которых связан с продуктом (учебником). Каждый раз, когда кто-то просматривает страницу с продуктом, в таблицу представлений продуктов добавляется новая строка.

Я хочу вернуть совокупное количество раз, когда пользователи видели продукты. Мне удалось получить все сообщения пользователей, затем связанный продукт, а затем подсчитать все просмотры этого продукта.

Теперь я хотел бы добавить еще одно условие 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 голосов
/ 30 июня 2018

Похоже, как сказал Джонас в комментариях, каждое отношение 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...