Попробуйте приведенный ниже код,
$products = App\Product::with([‘features'])
->whereHas(‘features', function ($query) {
$query->where(‘id’, 11);
})->where(‘category_id’, 17)->get();
Я отредактировал ответ. пожалуйста, проверьте сейчас
Для веб-проекта и принять меры против любых исключений, снижаемых к браузеру, Вы могли включить медицинский Контроль и также использование Пользовательских Ошибочных Страниц. Если Вы ожидаете возможность исключения в операторе выгоды, просто вложенное множество другая выгода попытки там так, чтобы это упало любезно.
В global.asax также можно подписаться на событие Application_Error, которое назовут для необработанного исключения
Andrew
Здоровье, контролирующее в ASP.NET: http://www.4guysfromrolla.com/articles/031407-1.aspx
Хороший для Вас для желания зафиксировать это. Запись сообщений об исключениях непосредственно назад пользователю может изложить значительную угрозу безопасности - поскольку Вы уже выяснили, сообщения об исключениях могут содержать большую информацию, которая могла помочь злонамеренному пользователю получить доступ к Вашему сайту.
Я смотрел бы на ELMAH (Модули регистрации ошибок и Обработчики); это - простой способ добавить журналирование подробных ошибок к Вашему веб-приложению.
Я записал бы подробную ошибку к своей базе данных и перенаправил бы пользователя к универсальной ошибочной странице.
Как сказанный REA_ANDREW, используйте здоровье, Контролирующее наряду с пользовательскими ошибочными страницами.
Одна вещь, которую он не сказал явно, состоит в том, что необходимо избежать стиля программирования, которое помещает блоки попытки/выгоды вокруг всего. Медицинский Контроль зарегистрирует необработанные исключения, и Пользовательские Ошибочные Страницы отобразятся пользователю вообще, Вы хотите, чтобы пользователь занялся ошибкой (если что-либо). Но это только произойдет, если Вы не поймаете исключения, поэтому просто оставите их в покое и позволите им распространить.