Laravel — запрашивает только одну строку в сводной таблице и возвращает все данные в отношениях

В настоящее время 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)

Скриншот

Любая помощь будет принята с благодарностью.

0

Решение

Вы можете попробовать что-то вроде этого

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);

}

Который найдет предупреждение по идентификатору, а также проверит, имеет ли оно отношение к критериям, отвечающим этим требованиям.

0

Другие решения

Я не знаю, правильно ли я понял вопрос, но постараюсь ответить

Если вы хотите передать не просто переменную из представления в контроллер, вы можете сделать что-то вроде этого:
Посмотреть

@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'
));
0

По вопросам рекламы [email protected]