В настоящее время criteria
BelongsToMany alerts
и наоборот. Они связаны через сводную таблицу: criteria_id
а также alert_id
,
Я получаю все Criteria
с ассоциированным Alerts
который принадлежит аутентифицированному пользователю, как таковой:
public function getMatches()
{
$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->get();
}
Это возвращает все связанные результаты, тогда как теперь, если пользователь выбирает определенный результат, я хочу показать только это. Это то, что я до сих пор:
контроллер
public function getMatchDetails($alert_id, $criteria_id)
{
$matches = Alert::find($alert_id)
->has('criterias')
->where('criteria_id', $criteria_id)
->get();
}
Что приводит к правильным переменным, однако я получаю ошибку MYSQL:
Столбец не найден: 1054 Неизвестный столбец ‘attribute_id’ в ‘where clause’
select * from `alerts` where `alerts`.`deleted_at` is null and
(select count(*) from `criterias` inner join `alert_criteria` on `criterias`.`id` =
`alert_criteria`.`criteria_id` where `alert_criteria`.`alert_id` = `alerts`.`id`)
>= 1 and `criteria_id` = 7)
Любая помощь будет принята с благодарностью.
Вы можете попробовать что-то вроде этого
public function getMatchDetails($alert_id, $criteria_id)
{
$match = Alert::whereHas('criterias', function ($q) use ($criteria_id) {
$q->where('criteria_id', $criteria_id);
})->find($alert_id);
}
Который найдет предупреждение по идентификатору, а также проверит, имеет ли оно отношение к критериям, отвечающим этим требованиям.
Я не знаю, правильно ли я понял вопрос, но постараюсь ответить
Если вы хотите передать не просто переменную из представления в контроллер, вы можете сделать что-то вроде этого:
Посмотреть
@foreach($matches as $match)
@foreach($match->alerts as $alert)
<td>{{$alert->pivot->criteria_id}}</td>
<td><a href="/users/alert/matches/{{{$alert->id}}}/{{{$var_2}}}">{{$alert->id}}</a></td>
@endforeach
@endforeach
контроллер
public function getMatchDetails($id, $var_2 = 0)
{
$myCriteriaIds = Criteria::whereUserId( Auth::id() )
->lists('id');
$match = Alert::find($id)->criterias()
->wherePivot('criteria_id', 'IN', $myCriteriaIds)
->get();
}
маршрут
Route::post('/users/alert/matches/{id}/{var_2}', array(
'as' => 'users-alert-matches',
'uses' => 'XXXController@getMatchDetails'
));