我有一个基本的添加系统,允许房东添加租户,然后租户有能力接受/拒绝。接受非常简单,当租户点击接受时,接受布尔值变为1.此时这会将所有行更改为接受,而不仅仅是房东和租户之间的行。
这是数据库中的示例行:
如果租户点击接受,则接受的行将更改为1,发送的请求将恢复为0.用户现已连接。
但是,所有包含accepted = 0
和request = 1
的行都会受到影响,而不仅仅是当前行。
这是接受的控制器
public function accept(Request $request)
{
Tenancy::where('accepted', 0)
->where('request_sent', 1)
->where('tenant_id', Auth::id())
->update([
'accepted' => 1,
'request_sent' => 0,
]);
return back();
}
有什么想法吗?
修改
路线网址
Route::post('/account/tenancy/{id}/accept', 'AccountController@accept')->middleware('auth');
接受/拒绝的整个表格和逻辑
@if($currentUser->userType == "Tenant")
@if($tenancy == null ||$tenancy->accepted == 0 && $tenancy->request_sent == 1 && $tenancy->tenant_id == $currentUser->id)
<form method="POST" action="/account/tenancy/{{$user->id}}/accept">
{{ csrf_field() }}
<input type="submit" class="btn btn-primary" value="Accept Request">
</form>
<form method="POST" action="/account/tenancy/{{$user->id}}/reject">
{{ csrf_field() }}
<input type="submit" class="btn btn-warning" value="Reject Request">
</form>
@endif
答案 0 :(得分:0)
你错过了另一个地方。您只是过滤了两个状态和tenant_id,但是您想要按landlord_id进行过滤。
类似于Tenancy::where('accepted', 0)->where('request_sent', 1)->where('tenant_id', Auth::id())->where('landlord_id', $id);
。
然而,如果房东和房客之间有两个租约,会发生什么?您可能希望在请求中传递租赁ID,并通过id检索accept函数中的租期。在这里要记住的重要一点是确保current user is allowed接受带有他通过的身份的租约。
根据问题中的新代码修改:
这将是我推荐的方法,而不是额外的landlord_id。
<form method="POST" action="/account/tenancy/{{$tenancy->id}}/accept">
{{ csrf_field() }}
<input type="submit" class="btn btn-primary" value="Accept Request">
</form>
public function accept(Request $request, $id)
{
Tenancy::find($id)
->update([
'accepted' => 1,
'request_sent' => 0,
]);
return back();
}
您还应该记住,需要授权/检查。
答案 1 :(得分:0)
根据您的评论/最近的修改,我认为这应该有效:
全部改变
action="/account/tenancy/{{$user->id}}/accept"
到
action="/account/tenancy/{{$tenancy->id}}/accept"
和控制器中的accept/reject
方法如下:
public function accept(Request $request, string $id)
{
Tenancy::find($id)
->update([
'accepted' => 1,
'request_sent' => 0,
]);
return back();
}