В настоящее время функция ниже работает правильно, однако ->has('alerts')
возвращает весь массив alerts
включая все данные об отношениях. Я хочу вернуть только определенные столбцы из этих отношений.
public function getMatches()
{
$matches = Criteria::select('id')
->has('alerts')
->with(['alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();
return Response::json(array(
'matches' => $matches,
'status' => '200'
)
);
}
Столбцы, которые я хотел бы вернуть, могут быть доступны в формате блейда (обратите внимание на стержень, который также используется):
@foreach($matches as $match)
@foreach($match->alerts as $alert)
{{$alert->pivot->criteria_id}}
{{$alert->pivot->alert_id}}
{{$alert->price_value}}
{{$alert->location->type}}
{{$alert->category}}
{{$alert->description}}
{{$alert->category}}
{{$alert->user->companies->first()->logo->url('thumb')}}
{{$alert->pivot->viewed}}
@endforeach
@endforeach
Я пробовал следующее:
public function getMatches()
{
$matches = Criteria::select('id')
->has(['alerts' => function ($q){
$q->select('id', 'pivot.criteria_id');
}])
->with(['alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();
}
Но я получил следующую ошибку:
strpos() expects parameter 1 to be string, array given
Ошибка возникает при добавлении следующей функции к has()
функция:
->has(['alerts' => function ($q){
$q->select('id', 'pivot.criteria_id');
}])
Любая помощь в том, как я могу выбрать указанные поля из таблицы «оповещения» и соответствующие отношения, я был бы очень признателен.
Вы не хотите использовать has
или же whereHas
для этого. has
Функции предназначены только для фильтрации результатов на основе отношения. Чтобы выбрать только определенные столбцы, используйте with()
$matches = Criteria::select('id')
->has('alerts')
->with(['alerts' => function($q){
$q->select('id', 'pivot.criteria_id');
}, 'alerts.location' => function($w){
$w->select('id');
}])
->with('alerts.user.companies')
->where('user_id', Auth::id())
->get();
В вашем коде у вас есть что-то вроде этого:
->has(['alerts' => function ($q){
//...
}])
Должно быть так:
->whereHas('alerts', function ($q){
//...
})