На мой взгляд, вы хотите, чтобы ваш запрос делал что-то похожее (наполовину псевдокод).
where (forms.user.id = Auth::id() OR (users.alternation = 1 AND alternated.user_id = Auth::id()))
Этого можно добиться с помощью Eloquent, так как я понимаю ваш домен, попробуйте что-то подобное .
use Illuminate\Database\Eloquent\Builder;
// wrap it in where, to avoid other queries precedence ruining the or clause
$query->where(function (Builder $query) {
// First part, where we assume user id is in forms
$query->where('user_id', Auth::id());
// Second part, check alternation or your relationship
$query->orWhere(function (Builder $query) {
$query->where('alternation', true);
// Use whereHas to check if your forms has the user as a relationship
$query->whereHas('alternated', function (Builder $query) {
$query->where('user_id', Auth::id());
});
});
});
Это должно обеспечить логики c, аналогичные псевдо-примеру, просто используя orWhere()
logi c, и вы можете проверить отношения с помощью whereHas()
.