Laravel-总搜索帖子价格

时间:2019-08-10 18:57:42

标签: php laravel laravel-5 eloquent laravel-5.8

如何仅对搜索到的帖子的价格求和?我有一个搜索页面,搜索的是日期,所以我按日期搜索帖子。当我输入日期时,我需要对搜索功能为该日期找到的所有帖子价格进行汇总。这是我的代码。

这是我在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:&nbsp;&nbsp;{{ Auth::user()->posts()->sum('cijena') }}&euro;</th>               
   </tr>
</tfoot>

但是当我键入它时,它会将所有帖子的价格加起来,而我只需要搜索的帖子。有什么建议吗?

1 个答案:

答案 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'));
// ...