2017-07-18 6 views
2

私の現在のジレンマがこれです使用してフォーム要求を検証します。この表1を呼ぶ。Laravelは:私は私はそれは私がデータベーステーブルから削除したいどの行を示して提出フォームを持っている</p> <p>:データベーステーブル「ではないにここで」

ただし、行のIDが別の表にある場合(外部キー制約がある場合)は、この行を削除できません。この表2を呼び出します。

つまり、行のIDがtable2で参照されていない場合は、table1から削除してください。

PHPでは、これはわかりやすいものです。そして正直なところ、コントローラの内部ではPHPでハードコードできますが、他のすべての機能はエラー処理を使用しているため、Laravelの検証エラーを使用したいと考えています。私が確認したいPHPの同等はこのようなものです:

foreach($result->id as $id){ 
    if (DB::table('table2')->where('fk_column', $id)->count() == 0){ 
     DB::table('table1')->where('id', $id)->delete(); 
    } 
} 

は、私は私の問題は、コードがどのように動作するかの十分な説明があり、そのどこにも答えを見ていませんよ。これを具体的に行い、エラーを吐き出す検証ルールを作成する方法はありますか? PHPコードを実行し、エラー配列に入れることができるエラーをスローする方法はありますか?

+3

:だからhttps://laravel.com/api/5.4/Illuminate/Validation/Rules/Exists.html#method_whereNot

利用可能whereNot()メソッドは、私が(警告され、私はそれをテストしていない)と思いますが、それをこのような何かを書きたいです箱の中に何かがある場合は、カスタム検証ルールを書く必要があります。 https://laravel.com/docs/5.4/validationこれは 'exists'ルールとは逆の並べ替えです。 – Giedrius

答えて

1

最も簡単な解決策は、カスタムバリデーターを作成することです。

Laravel 5.4での例では、Rule::exists('staff')->where(function ($query) ...を使用していることをここにhttps://laravel.com/docs/5.4/validation#rule-exists

最後の例で説明したように、あなたはおそらくまた、カスタムクエリをexists検証ルールを使用して同じ効果を得ることができますが、APIドキュメントもありますことを示しています私は、Tません

Validator::make($data, [ 
    'delete_id' => [ 
     'required', 
     Rule::exists('table2')->whereNot(function ($query) use ($data) { 
      $query->where('fk_column', $data['delete_id']); 
     }), 
     // ... 
    ], 
]); 
関連する問題

 関連する問題