簡體   English   中英

如何修復它以在結果列表中顯示用戶的帖子總數?

[英]How can I fix it to show the total number of posts by user in the result list?

前提是會員公告板正常運行,可以通過以下代碼獲取並顯示登錄用戶發布的內容中“好吃”、“不好吃”等關鍵字的總數。 你能教我在哪里修改以列出所有經過身份驗證的用戶發布的關鍵字總數嗎?

Web.php:

Route::get('/myfood', 'HomeController@myfood')->name('home.myfood');
Route::get('/foods', 'HomeController@foods')->name('home.foods');

Controller:

namespace App\Http\Controllers;
    
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Post;
use App\Models\Comment;
use Auth;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\DB;

class HomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    public function myfood()
    {
        $user = auth()->user()->id;
        $myusers=User::where('id', $user)->get();
        $PostsOisiCount = Post::where('user_id', $user)->where(function($query) {$query->where('body', 'like', '%delicious%')
            ->orWhere('body', 'like', '%bad%');})->count();
        $PostsCount = Post::where('user_id', $user)->count();
        return view('myfood', compact('user', 'myusers', 'PostsOisiCount', 'PostsCount'));
    }
    public function foods()
    {
        $users = User::all();
        $PostsOisiCount = Post::where('body', 'like', '%delicious%')
            ->orWhere('body', 'like', '%bad%')
            ->count();
        $PostsCount = Post::count();
        return view('foods', compact('users', 'PostsOisiCount', 'PostsCount'));
    }
}

我的食物刀片:

<table>
    <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">Name</th>
            <th scope="col">Results</th>
        </tr>
    </thead>
    <tbody>
        @foreach($myusers as $myuser)
            <tr>
                <th>{{$myuser->id}}</th>
                <td>{{$myuser->name}}</td>
                <td>
                    ($PostsOisiCount / $PostsCount ) * 100
                </td>
            </tr>
        @endforeach
    </tbody>
</table>

食品刀片:

<table>
    <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">Name</th>
            <th scope="col">Results</th>
        </tr>
    </thead>
    <tbody>
        @foreach($users as $user)
            <tr>
                <th>{{$user->id}}</th>
                <td>{{$user->name}}</td>
                <td>
                    ($PostsOisiCount / $PostsCount ) * 100
                </td>
            </tr>
        @endforeach
    </tbody>
</table>

我會盡力幫助你,但首先讓你的代碼更高效:

當你想對 Model 進行count時,你不需要執行->get()->count()因為它是從數據庫中獲取數據( ->get() )而且這可能是巨大的,甚至用完 memory,然后計算數組值 ( ->count() )。 您可以直接依賴數據庫,而不是那樣做,而數據庫總是比任何語言都更快地這樣做。 所以你可以是: $total = Model::conditions()->count()$total將直接有一個正數(或0 ) integer 數字,就是這樣!

你的代碼應該是這樣的:

$users = User::all();
$PostsOisiCount = Post::where('user_id', $users)->where('body', 'like', '%delicious%')->orWhere('body', 'like', '%bad%')->count();
$PostsCount = Post::where('user_id', $users)->count();

請記住,您目前沒有獲得登錄用戶的數據,而是每個人的數據,因為您正在執行User::all() ,所以您將獲得所有未被軟刪除的 ID。 除了這樣做,您仍然可以通過刪除where('user_id', $users)來獲取所有內容:

$PostsOisiCount = Post::where('body', 'like', '%delicious%')->orWhere('body', 'like', '%bad%')->count();
$PostsCount = Post::count();

為了能夠從經過authenticated的用戶那里獲取數據,這絕對比看起來復雜得多,而且它在很大程度上取決於您的身份驗證“驅動程序”......您在哪里存儲或跟蹤會話? 如果他們已登錄,您應該閱讀什么內容? 所以這在很大程度上取決於您的身份驗證實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM