雄辩的有条件或何处

时间:2019-08-25 09:46:50

标签: laravel eloquent

我有一个搜索框,可以搜索产品。我希望它的工作方式是,如果我搜索产品名称,并且该产品存在,那么它将返回与搜索匹配的产品。如果搜索与任何产品的名称都不匹配,请然后搜索产品说明。这是我尝试过的

$products = Product::where(function ($query) use ($terms) {
            foreach ($terms as $term) {
                // Loop over the search terms
                $query->orWhere('name', 'like', '%' . $term . '%');
            }
        })->latest()->paginate($productsPerPage);

        if(empty($products)){
            $products = Product::where(function ($query) use ($terms) {
              foreach ($terms as $term) {
                  $query->orWhere('description', 'like', '%' . $term . '%');
              }
          })->latest()->paginate($productsPerPage);
        }

但是,这不起作用,如果搜索中包含产品说明,则不会返回任何结果。

1 个答案:

答案 0 :(得分:1)

empty($products)不起作用,因为paginate调用总是返回一个LengthAwarePaginator实例,因此不是empty

可以使用以下代码:

   $products = Product::where(function ($query) use ($terms) {
        foreach ($terms as $term) {
            // Loop over the search terms
            $query->orWhere('name', 'like', '%' . $term . '%');
        }
    })->latest()->paginate($productsPerPage);

    if ($products->total() == 0) {
        $products = Product::where(function ($query) use ($terms) {
            foreach ($terms as $term) {
                $query->orWhere('description', 'like', '%' . $term . '%');
            }
        })->latest()->paginate($productsPerPage);
    }