如何仅对搜索到的帖子的价格求和?我有一个搜索页面,搜索的是日期,所以我按日期搜索帖子。当我输入日期时,我需要对搜索功能为该日期找到的所有帖子价格进行汇总。这是我的代码。
这是我在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
表脚,应该加上我的帖子价格:
<tfoot>
<tr>
<th>UKUPAN IZNOS: {{ Auth::user()->posts()->sum('cijena') }}€</th>
</tr>
</tfoot>
但是当我键入它时,它会将所有帖子的价格加起来,而我只需要搜索的帖子。有什么建议吗?
答案 0 :(得分:0)
...但是当我键入它时,它会将所有帖子的价格加起来,而我只需要搜索的帖子
这是因为您在视图中有以下一行:
<th> ... {{ Auth::user()->posts()->sum('cijena') }} ... </th>
这是直接执行其他查询以获取cijena
的总和。因此,无论是否约束结果,这都将使输出保持相同的值。此不同的查询对其余查询值有任何影响。
您可以做的是在主查询中计算该值并将其返回到视图:
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!');
}
});
因此,现在您可以访问刀片文件中的额外变量$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'));
// ...