Laravel - 总搜索帖子价格

Laravel - sum searched posts price

我怎样才能只对我搜索过的帖子求和?我有一个搜索页面,搜索的是日期,所以我按日期搜索帖子。当我输入我想要的日期时,我需要对我的搜索功能在该日期找到的所有帖子价格求和。这是我的代码。

这是我在 web.php 中的搜索:

Route::get('/search', 'PagesController@search');

Route::post('/search',function(){
    $q = Input::get ( 'q' );
    $post = auth()->user()->posts()->where('ime','LIKE', '%'.$q.'%')->get();
    if(count($post) > 0)
        return view('search')->withDetails($post)->withQuery ( $q );
    else return view ('search')->withMessage('Nema rezultata Vaše pretrage. Probajte ponovo!');
});

这是我在 PagesController 中的搜索功能:

public function search(){
        $user_id = auth()->user()->id;
        $user = User::find($user_id);
        return view('search')->with('posts', $user->posts);
    }

这是我的 search.blade.php 和 table 页脚应该是我的帖子总价:

<tfoot>
   <tr>
      <th>UKUPAN IZNOS:&nbsp;&nbsp;{{ Auth::user()->posts()->sum('cijena') }}&euro;</th>               
   </tr>
</tfoot>

但是当我输入这个时,它会汇总所有帖子的价格,而我只需要搜索到的帖子。有什么建议吗?

... but when I type this it sums me price for all posts, and I just need for the searched ones

这是因为您的视图中有此行:

<th> ... {{ Auth::user()->posts()->sum('cijena') }} ... </th>

这是直接执行不同的查询以获取 cijena 的总和。因此,无论您是否限制结果,这都会使输出保持相同的值。这个不同的查询对其余查询值有任何影响。

您可以做的是在主查询中计算该值并return它到视图:

Route::post('/search', function () {
    $q = Input::get('q');
    $posts = auth()->user()->posts()->where('ime', 'LIKE', '%' . $q . '%')->get();

    if (count($posts) > 0)
    {
        $sum = $posts->sum('cijena'); // <---

        return view('search')->withDetails($posts)->withTotal($sum);
    }   //                                        ^^^^^^^^^^^^^^^^^
    else
    {
        return view('search')->withMessage('Your error message goes here!');
    }
});

现在您可以访问 blade 文件中的一个额外变量 $total

<th> ... {{ $total) }} ... </th>

此外,无需为同一操作定义两条路由,您可以通过一种简单的方法减少所有这些。此外,您不应从前端执行查询。操作如下:

# web.php

Route::get('/search', 'PagesController@search');

然后在你的控制器中:

# PageController.php

use Illuminate\Http\Request;

// ...

public function search(Request $request)
{
    $posts = auth()
        ->user()
        ->posts()
        ->when($request->has('q'), function ($q) { // first check if there is a query
            return $q->where('ime', 'LIKE', '%' . request('q') . '%'); // if so, apply filter
        })
        ->get();

    if (count($posts) > 0) // checking if there is enough posts..
    {
        $sum = $posts->sum('cijena'); // if so get the sum of 'cijena'

        return view('search')->withDetails($posts)->withTotal($sum);
    }   //                                         ^^^^^^^^^^^^^^^^
    else
    {
        return view('search')->withMessage('Your error message goes here!');
    }
}

更新

这一行是引发错误的行:

<p class="searchp">Rezultati vaše pretrage <b> {{$q}} </b>: </p>

这是因为我没有包含 $q 变量。只需将其附加到您的回复中以备不时之需:

// ...
return view('search')->withDetails($posts)->withTotal($sum)->with('q', request('q'));
// ...