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: {{ Auth::user()->posts()->sum('cijena') }}€</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'));
// ...
我怎样才能只对我搜索过的帖子求和?我有一个搜索页面,搜索的是日期,所以我按日期搜索帖子。当我输入我想要的日期时,我需要对我的搜索功能在该日期找到的所有帖子价格求和。这是我的代码。
这是我在 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: {{ Auth::user()->posts()->sum('cijena') }}€</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'));
// ...