拉拉维尔在哪里没有得到任何结果?



我有一个餐厅模型,每个餐厅都有一个联系人模型, 并且每个联系人都与一个城市模型相关:

餐厅.php:

public function contact()
{
return $this->hasOne('AppContact','rest_id');
}

联系人.php:

public function restaurant()
{
return $this->belongsTo('AppRestaurant','rest_id','id'); 
}
public function city()
{
return $this->belongsTo('AppCity');
}

城市.php:

public function contacts()
{
return $this->hasMany('AppContact');
}

现在,我想做的是搜索餐厅名称以及城市名称。
我的搜索控制器代码如下所示:

// the purpose of this condition is to keep the query empty until applying desired filters
$data = Restaurant::where('id', '=', '0');
$cityRest=$request->cityRest ;
if (!empty($cityRest)) {
$nameFilter = Restaurant::where('name', 'like', "%$cityRest%");
$contactFilter = Restaurant::whereHas('contact', function ($contact) use ($cityRest) {
$contact->where('address', 'like', "%$cityRest%");
$contact->whereHas('city', function ($city) use ($cityRest) {
$city->where('cityName', 'like', "%$cityRest%");
});
});
$data = $data->union($nameFilter);
$data = $data->union($contactFilter);
}
$data->get();

搜索餐厅名称时,结果会正确返回,但在搜索城市名称时,尽管存在具有具有城市的联系人模型的餐厅,但不会返回任何内容???

您必须使用orWhereHas而不是whereHas

使用whereHas,您可以搜索contact.addresscity.name与您的输入相匹配的餐厅。

通过使用orWhereHas,您可以搜索contact.addresscity.name与您的输入相匹配的餐厅。


AND 和 OR 运算符用于根据多个条件筛选记录:

如果由 AND
  • 分隔的所有条件都为 TRUE,则 AND 运算符将显示一条记录。
  • 如果由 OR
  • 分隔的任何条件为 TRUE,则 OR 运算符将显示一条记录。


试试这个:

$contactFilter = Restaurant::whereHas('contact', function ($contact) use ($cityRest) {
$contact->where('address', 'like', "%$cityRest%");
$contact->orWhereHas('city', function ($city) use ($cityRest) {
$city->where('cityName', 'like', "%$cityRest%");
});
});

您正在搜索字符串"%$cityRest%"

我认为应该是这样的:

Restaurant::where('name', 'like', "%".$cityRest."%");

相关内容

  • 没有找到相关文章

最新更新