我使用Algolia作为我的搜索驱动程序,我只是想根据他们是否有关系来搜索我的用户记录。
App\User::has('restaurant')->search('Chris')->get();
我使用Laravel Scount并希望搜索所有拥有餐馆的用户然后列出它们,但我收到的错误是
带消息的BadMethodCallException'调用未定义的方法 照亮\数据库\查询\生成器::搜索()'
如何根据关系进行搜索?
答案 0 :(得分:1)
最好的方法是在发送给Algolia的数据中添加restaurant int属性,这样你就可以依赖"其中"属性。我不知道您的数据是什么样的,因此代码可能需要进行一些修改。
在哪里非常有限,它只对ints采用相同的操作:https://laravel.com/docs/scout#where-clauses
where
方法首先,覆盖toSearchableArray
方法,使其具有以下内容:
public function toSearchableArray()
{
$record = $this->toArray();
$record['has_resturant'] = (int) !empty($this->restaurants);
return $record;
}
使用命令php artisan scout:import "App\User"
将此包添加到您的项目中:https://github.com/algolia/laravel-scout-algolia-macros
创建restaurant_count
属性
public function toSearchableArray()
{
$record = $this->toArray();
$record['resturant_count'] = count($this->restaurants);
return $record;
}
重新索引。
以这种方式搜索:
User::search('Chris')->with('filters' => 'restaurant_count>0')->get();
如果这对您有用,请告诉我。
答案 1 :(得分:0)
当模型缺乏特质时,就会出现这种情况
将特征添加到模型中,您希望搜索功能可用。您还需要通过$ searchable属性指定搜索规则(要运行搜索的列)。
class User extends Authenticatable
{
use SearchableTrait;
.
.
.
}
并在该控制器功能中:
App\User::search('chris')->with('restaurant')->get();
这将返回带有chris加入餐厅的用户
答案 2 :(得分:0)
使用 {
xtype: 'textfield',
fieldLabel: 'Address',
width: '100%',
enableKeyEvents : true,
listeners: {
keyup : function(obj) {
alert('test fire ' + obj.getValue());
}
}
},
代替first()
使其正常工作。