laravel의 유효성 검사기는 예를 들어 추가 열을 검사해야하는 경우와 같이 존재 데이터베이스 규칙의 사용자 지정을 가질 수 있습니다. the manual의 예는 :래벨 유효성 검사기에 대한 사용자 정의 존재 규칙에 조인을 추가하려면 어떻게합니까?
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
폐쇄의 query
는 그래서 난이이 객체의 어떤 종류의 매우 긍정적 인 아니에요, typehinted되지 않습니다. 나는 DatabaseRule
그 자체가 where
, wherenot
등등에 대해서만 약간의 기능을 가지고 있음을 볼 수있다. 그러나 나는 혼합에 조인을 추가하려고한다.
예를 들어 account_id = 1
의 직원에 대한 이메일이 있어야한다고 나와 있지만 팀 (모든 직원이 separte 테이블 인 팀에 속해있는 경우)이 특정 속성 (예 : team.active = 1
? 그래서 우리는 직원의 팀이 있는지 확인 방법 나는이 규칙에 가입 추가 할 수 있습니다
전체 직원은/팀 것은 내가 궁금하네요 결국
그래서 물론의 예입니다 '활성'열은 1입니다.
내 첫 번째 문제 일 수 있습니다 : 그 유형은 $query
입니까?이 같은 일이 잘 될 것이라고 상상하지만,이 유효 의심 할 이유가 없습니다 :
Rule::exists('staff')->where(function ($query) {
$query
->join('team', 'team.team_id', '=', 'staff.team_id')
->where('team.active', 1);
})
이 작동하지 않습니다. 이상한 것은이 오류가 발생하지 않습니다 자체 조인,하지만 무시하는 것 같다
열을 찾을 수 없습니다 :
에서 1054 알 수없는 열 'team.active' 'where 절'
(SQL :staff
에서 집계로 계산 (*)을 선택 곳team
.active
= 1) 나는이 기능을 사용할 수 있는지 도박 해요로 나는이 (작은 변화가 일 것으로 예상했을 것이다
) 여기), 존재하지 않는 함수를 호출하기 때문에 오류가 발생합니다. 그러나 내가 얻는 것은 빌드이지만 조인이없는 쿼리입니다.
의견에서 나는 해당 기능에 $query->toSQL()
을 추가했습니다. 이것은 오히려 예상 된 결과를 보여 않지만, 내가지고있어 오류로 계산하지 않습니다
select * from `staff`
inner join `teams` on `teams`.`team_id` = `staff`.`team_id`
where `teams`.`active` = ?
시도 VAR 덤프'$ 질의 -> toSql()'에 당신이 얻는 것. '$ query'는'Illuminate \ Database \ Query \ Builder'의 인스턴스이므로, 조인하는데 아무런 문제가 없어야합니다. – TheFallen
사용자 지정 유효성 검사 규칙은 무엇입니까 ?? [doc here] (https://laravel.com/docs/5.5/validation#custom-validation-rules) – Maraboc
@Maraboc 예, 그건 대체 될 것이지만 이것이 가장 읽기 쉽고/좋은 방법이라고 생각했습니다. 그것. – Nanne