laravel - Orwhere has 方法不允许 null
问题描述
在此处输入图像描述我正在尝试使用 2 个模型实现多对多关系搜索。我从多个复选框值中获取输入,并希望在输入数据时搜索与 A 或 B 匹配的项目。
我读了这个网址并写了同样的逻辑。 https://laracasts.com/discuss/channels/laravel/many-to-many-relationship-with-2-pivot-table-data-search
public function search(Request $request)
{
$languages = $request->lang;
$fields = $request->field;
$agencies = Agency::with('languages')->with('specialized_fields')
->orWhereHas('languages', function($query) use ($languages) {
$query->whereIn('language_id', $languages);
})
->orWhereHas('specialized_fields', function($query) use ($fields) {
$query->whereIn('specialized_field_id', $fields);
})
->get();
dd($agencies);
}
我希望实现 A 或 B 搜索,但我得到了这个错误。
传递给 Illuminate\Database\Query\Builder::cleanBindings() 的参数 1 必须是数组类型,给定 null,在 /var/www/jtf/vendor/laravel/framework/src/Illuminate/Database/Query/Builder 中调用.php 在第 907 行
如果 A 或 B 为空,似乎会导致此错误,但为什么呢?OrWhereHas 方法是否仅在有输入时才有效?
/添加信息/
我的错误信息 我的代理模式
类代理扩展模型 { 保护 $guarded = [ 'id' ];
public function languages(){ return $this->belongsToMany('App\Language'); } public function specialized_fields(){ return $this->belongsToMany('App\SpecializedField'); } public function region(){ return $this->hasOne('App\Region'); } }
解决方案
我推测您开始使用orWhereHas()
可能导致问题的 where 查询链,请尝试改用开始whereHas()
。
public function search(Request $request){
$languages = $request->lang;
$fields = $request->field;
$agencies = Agency::with('languages', 'specialized_fields') // you can get away by just using one with(), not needed but its cleaner this way
->whereHas('languages', function($query) use ($languages) { // previously orwherehas
$query->whereIn('language_id', $languages);
}) ->orWhereHas('specialized_fields', function($query) use ($fields) {
$query->whereIn('specialized_field_id', $fields);
})
->get();
dd($agencies);
}
推荐阅读
- c++ - 为什么这个链表程序没有给出任何输出?
- java - 如何使用 Java 清除 Excel 过滤器
- python - AttributeError:部分初始化的模块“speech_recognition”没有属性“Recognizer”(很可能是由于循环导入)
- android - 使用 ViewBinding 测试片段场景
- android - 构建签名的 apk 时出错。错误是“密钥库被篡改,或密码不正确”
- c# - 如果反序列化失败,则跳过 Cosmos DB 容器中的文档
- javascript - 新事件()与 document.createEvent()
- python - 如何从熊猫数据框输出中删除“[]”
- c# - 如何解决必须在 Xamarin 的主线程上调用权限请求?
- testing - 如何使用“deployment_status”小猫并且仅在 QAS 分支上运行 Github Actions?