我想让所有用户都可以选择从数据透视表中“分离”一行 - alert_criteria
,但前提是他们拥有'标准',后者由'数据透视表中的criteria_id'。
关系
警报属于多种标准。
Criteria areToMany Alerts。
用户所属的商标。
他们目前正在通过以下方式查看数据透视表的数据:
$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->get();
我希望他们能够从数据透视表中删除任何 他们的 行。
在我的视图中,我可以访问每个数据透视表行的ID
并通过以下方式发布到控制器:
{{ Form::open(array('route' => array('archiveMatch', $alert->id), 'role'=>'form')) }}
@foreach($matches as $match)
@foreach($match->alerts as $alert)
{{$alert->id}}
@endforeach
@endforeach
{{ Form::close() }}
我最初想到:
public function postArchiveMatch($id)
{
DB::delete('delete from alert_criteria where id = ?' , array($id));
}
但是,我想检查用户是否真正拥有此数据透视表行。据我所知,知道此URL的任何人都可以删除数据透视表行,即使他们不拥有“条件”:
Route::post('users/match/destroy/{id}',
array('as' => 'archiveMatch', 'uses' => 'UsersController@postArchiveMatch'));
我能想到的唯一漫长的方式是:
获取与
criteria_id
相关的alert_criteria.id
。 (来自表格)。获取所有
criteria
user_id
=auth::id
检查'criteria_id'是否在列表中。如果不是,那意味着用户不拥有它。
我很确定我过度复杂,但任何帮助都会非常受欢迎。
答案 0 :(得分:0)
您可以在criteria_id
查询中指定delete
范围,以限制查询范围。我正在思考以下几点:
public function postArchiveMatch($id)
{
$myCriteriaIds = Db::table('criteria')->select('id')
->where('user_id', '=', Auth::id())
->get()
->toArray();
$myCriteriaIds = explode(',', $myCriteriaIds);
DB::table->('alert_criteria')
->where('id', $id)
->where('criteria_id', 'IN', $myCriteriaIds)
->delete();
}