Custom validatie regel in Laravel
Ik ben bezig met een Laravel project. Aangezien Laravel geen out of the box composite key validatie heeft, wat echt doet wat je wilt. Moet je zelf een custom validatie regel schrijven. Ik wil namelijk dat als je een post_translation toevoegd, dat de combinatie van post_id en lang_id uniek is. Oftewel elke post kan maar 1x vertaald worden per taal die beschikbaar is.
Ik heb een custom form request bestand wat ik gebruik voor de validatie. Maar ik krijg die custom regel niet aan de praat.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//storePostTranslation.php
public function rules()
{
return [
'post_id' => ['exists:post_translations', Rule::unique('post_translations')->where(function ($query) {
return $query->where('lang_id', $request->lang_Id)->where("post_id", $request->post_id);
})],
'lang_id' => 'required|exists:post_translations',
'title' => 'required',
'content' => 'required',
];
}
//postTranslationController.php
public function store($post_id, StorePostTranslation $request)
{
$data = $request->validated();
$post = Post::find($post_id);
$post->translations()->create($data);
}
public function rules()
{
return [
'post_id' => ['exists:post_translations', Rule::unique('post_translations')->where(function ($query) {
return $query->where('lang_id', $request->lang_Id)->where("post_id", $request->post_id);
})],
'lang_id' => 'required|exists:post_translations',
'title' => 'required',
'content' => 'required',
];
}
//postTranslationController.php
public function store($post_id, StorePostTranslation $request)
{
$data = $request->validated();
$post = Post::find($post_id);
$post->translations()->create($data);
}
Als iemand hier raad mee weet, dankjewel!
Toevoeging op 12/09/2020 19:39:05:
Update:
Ik heb de validatie regel een beejte aangepast, aan waarvan ik dacht dat zal wel werken.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
public function rules (Request $request)
{
return [
'lang_id' => ['required', Rule::unique('post_translations')->where(function ($query) {
return $query->where('post_id', 1);
})],
'title' => 'required',
'content' => 'required',
];
}
{
return [
'lang_id' => ['required', Rule::unique('post_translations')->where(function ($query) {
return $query->where('post_id', 1);
})],
'title' => 'required',
'content' => 'required',
];
}
maar krijg nu bij elke toevoeging, of de taal nou al wel of niet gebruikt is voor een translation, "Lang id is already in use"
Er zijn nog geen reacties op dit bericht.