Ориентация на один ряд, а не на все, что имеет определенное значение - PullRequest
0 голосов
/ 06 мая 2018

У меня есть базовая система добавления, которая позволяет арендодателям добавлять арендаторов, и арендаторы имеют возможность принимать / отклонять. Принятие очень просто: когда клики арендатора принимают, логическое значение принятия изменяется на 1. В данный момент все строки принимаются, а не только между арендодателем и арендатором.

Это пример строки в базе данных:

row

Если арендатор щелкнет по кнопке «Принять», принятая строка изменится на 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();
}

Есть идеи?

EDIT

Маршрутный URL

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

дд ($ аренды)

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Основываясь на ваших комментариях / последних изменениях, я считаю, что это должно работать:

Изменить все

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();
}
0 голосов
/ 06 мая 2018

Вам не хватает другого, где. Вы просто фильтруете два статуса и tenant_id, но хотите отфильтровать по идентификатору landlord_id.

Что-то вроде Tenancy::where('accepted', 0)->where('request_sent', 1)->where('tenant_id', Auth::id())->where('landlord_id', $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();
}

Вы должны помнить, что потребуется авторизация / проверка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...