第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Laravel/Ajax - 加載更多結(jié)果而不與請(qǐng)求沖突的新結(jié)果

Laravel/Ajax - 加載更多結(jié)果而不與請(qǐng)求沖突的新結(jié)果

PHP
富國(guó)滬深 2021-11-05 13:08:12
我的網(wǎng)站上有文章,文章有評(píng)論。當(dāng)有人拉起一篇文章時(shí),默認(rèn)的評(píng)論排序是“新建”。我的第一個(gè)控制器將拉起這篇文章和 10 條評(píng)論(我只使用 10 條用于測(cè)試目的,實(shí)際上它會(huì)像 200 條)。$submission = Submission::where('id', $id)->first();$comments = Comment::where('submission_id', $submission->id)            ->where('parent_id', NULL)            ->orderBy('removed','asc')            ->orderBy('created_at', 'desc')            ->paginate(10);我還有第二個(gè)控制器,用于通過(guò) AJAX 加載對(duì)文章的更多評(píng)論。public function loadMoreNewComments($submissionID, $skip, Request $request) {    $submission  = Submission::findOrFail($submissionID);    if($request->ajax()) {        $comments = $submission->comments()->orderBy('created_at', 'desc')->skip($skip)->take(10)->get();        return [            'replies' => view('partials.comment_loop')->with('submission', $submission)->with('comments', $comments)->render(),        ];      }}這將使當(dāng)您單擊“查看更多評(píng)論”按鈕時(shí),您會(huì)獲得 10 個(gè)以上的結(jié)果。這使用了一個(gè)$skip計(jì)數(shù),它根據(jù)已加載的數(shù)量跳過(guò)一定數(shù)量的結(jié)果。因此,由于在此示例中我們一次加載 10,因此第一次$skip計(jì)數(shù)將為 10,然后第二次將是 20,然后是 30,依此類推,然后將take(10)在跳過(guò)的那些之后產(chǎn)生結(jié)果。這是我的刀片視圖中的樣子:<div id="comment-thread-container">@foreach ($comments as $comment)    @include('partials.comment_block')  @endforeach</div>@if ($comments->total() > 10)        <span id="viewMoreNewComments" data-submission-id="{{ $submission->id }}" data-skip="10">            <i class="fa fa-comments" aria-hidden="true"></i>            View More Comments (<span id="viewComments-count">{{$comments->total() - 10}}</span>)        </span>@endif現(xiàn)在這將工作得很好,直到您有用戶在您加載頁(yè)面后發(fā)表評(píng)論。因?yàn)楫?dāng)用戶在您加載頁(yè)面后發(fā)表評(píng)論時(shí),它會(huì)將計(jì)數(shù)設(shè)置為 1。因此,例如,如果您加載一篇文章,并且當(dāng)您閱讀該文章時(shí),又有 3 條評(píng)論,如果您單擊“查看更多評(píng)論”按鈕,您將看到 3 條已加載的重復(fù)評(píng)論。我不知道如何解決這個(gè)問(wèn)題。一旦我按“最佳分?jǐn)?shù)”實(shí)施排序,這將是一個(gè)更大的問(wèn)題,因?yàn)樵u(píng)論可以有贊成票和反對(duì)票,因?yàn)閺挠脩糸_始閱讀文章到他們完成時(shí),評(píng)分最高的評(píng)論可能會(huì)發(fā)生巨大變化。什么是解決這個(gè)問(wèn)題的方法?保留已加載到緩存中的所有評(píng)論 ID 的數(shù)組,然后在每個(gè)請(qǐng)求中傳遞該數(shù)組?或者有更優(yōu)雅的解決方案嗎?
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

+1 對(duì)于建議使用自動(dòng)增量 id 而不是 created_at 的 Matthias S。


我建議您在服務(wù)器端跟蹤 3 件事,因?yàn)槟梢詫?duì)多于一列進(jìn)行排序。


列(例如:id/score)、最后一個(gè)值和排序順序(asc/desc)。你的新電話看起來(lái)像這樣


var page = host + "/load-more-comments/" + $submissionID + "/" + $column + "/" + $lastValue + "/" + $sort;

因此,您的新電話將如下所示:


public function loadMoreNewComments($submissionID, $skip, Request $request) {


    $submission  = Submission::findOrFail($submissionID);


    if($request->ajax()) {


        $comments = Comment::where('submission_id', $submission->id)

                           ->orderBy($column, $sort)

                           ->when(true, function($query) use ($column, $lastValue, $sort) {

                               if ($sort === 'desc') {

                                  return $query->where($column, '<', $lastValue);

                               } else {

                                  return $query->where($column, '>', $lastValue);

                               }

                           })

                           ->take(10);


        return [

            'replies' => view('partials.comment_loop')->with('submission', $submission)->with('comments', $comments)->render(),

        ];  


    }


}

編輯:由于多個(gè)評(píng)論可以具有相同的分?jǐn)?shù),因此當(dāng)您按分?jǐn)?shù)排序時(shí),您還必須保留所有 id 的數(shù)組,其中分?jǐn)?shù)等于最后一個(gè)值。將此數(shù)組發(fā)送到服務(wù)器并使用類似于此的代碼:


        $comments = Comment::where('submission_id', $submission->id)

                           ->orderBy($column, $sort)

                           ->when($column === 'id', function($query) use ($lastValue, $sort) {

                               if ($sort === 'desc') {

                                  return $query->where('id', '<', $lastValue);

                               } else {

                                  return $query->where('id', '>', $lastValue);

                               }

                           })->when($column !== 'id', function($query) use ($column, $lastValue, $sort, $arrayOfIds) {

                               if ($sort === 'desc') {

                                  return $query->where($column, '<=', $lastValue)->whereNotIn('id', $arrayOfIds);

                               } else {

                                  return $query->where($column, '>=', $lastValue)->whereNotIn('id', $arrayOfIds);

                               }

                           })->take(10);


查看完整回答
反對(duì) 回復(fù) 2021-11-05
  • 1 回答
  • 0 關(guān)注
  • 192 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)