0

我的代码是这样的:

<?php
public function getFavoriteStore($param = null)
{
    $num = 20;
    $q = $param['q'];
    $location = $param['location'];

    $result = $this->store_repository->whereHas('favorites', function ($query) {
        $query = $query->where('stores.status', '=', 1)
              ->where('favorites.favoritable_type', 'like', 'App\\\Models\\\Store');
        if(isset($location))
           $query = $query->where('stores.address', 'like', "%$location%");

        if(isset($q)) {
            $query = $query->where(function ($query) use ($q) {
                $query->where('stores.name', 'like', "%$q%")
                      ->where('stores.address', 'like', "%$q%", 'or');
            });
        }

        return $query;
    })->paginate($num);

    return $result;
}

有用

但是,条件 if ( if(isset($location))& if(isset($q))) 不起作用

好像还是有错

有谁能帮助我吗?

我遵循本教程:https ://laravel.com/docs/5.3/eloquent-relationships#querying-relationship-existence

4

1 回答 1

2

你需要use()在你的第一个闭包中添加:

public function getFavoriteStore($param = null)
{
    $num = 20;
    $q = $param['q'];
    $location = $param['location'];

    $result = $this->store_repository->whereHas('favorites', function ($query) use($q, $location) {
        $query->where('stores.status', '=', 1)
              ->where('favorites.favoritable_type', 'like', 'App\\\Models\\\Store');
        if(isset($location))
           $query->where('stores.address', 'like', "%$location%");

        if(isset($q)) {
            $query->where(function ($query) use ($q) {
                $query->where('stores.name', 'like', "%$q%")
                      ->where('stores.address', 'like', "%$q%", 'or');
            });
        }
    })->paginate($num);

    return $result;
}

并且不需要$query在闭包函数中分配和返回变量。

于 2017-02-25T02:39:25.093 回答