Checkbox 激活/停用Laravel中的多个客户端

Checkbox 激活/停用Laravel中的多个客户端,checkbox,laravel-5,laravel-5.1,Checkbox,Laravel 5,Laravel 5.1,我使用的是Laravel 5.1 我有一张客户桌。客户端将创建自己的帐户并等待管理员批准。管理员可以随时激活、停用或阻止它们。我在表格底部有三个链接(如果需要,我可以更改为按钮)ACTIVE,DEACTIVATE&BLOCK。每行中都有复选框 现在,我想选择一个或多个客户端,并更改数据库中member表的status字段的值 以下是我的观点: <table border="1"> <tr> <td></td>

我使用的是Laravel 5.1

我有一张客户桌。客户端将创建自己的帐户并等待管理员批准。管理员可以随时激活、停用或阻止它们。我在表格底部有三个链接(如果需要,我可以更改为按钮)
ACTIVE
DEACTIVATE
&
BLOCK
。每行中都有复选框

现在,我想选择一个或多个客户端,并更改数据库中
member
表的
status
字段的值

以下是我的观点:

<table border="1">
    <tr>
        <td></td>
        <td>Name</td>
        <td>Activity</td>
        <td>main Activity</td>
        <td>Legal Status</td>
        <td>SIREN Code</td>
        <td>Contact Firstname</td>
        <td>Contact Lastname</td>
        <td>Contact Email</td>
        <td>Contact Telephone</td>
        <td>Address</td>
        <td>Town</td>
        <td>Area</td>
        <td>Region</td>
        <td>Creation Date</td>
        <td>Offer Pack Name</td>
        <td>Login Password</td>
        <td>Status</td>
    </tr>
    @foreach($clients as $client)
    <tr>
        <td>{!! Form::checkbox('client[]',$client->id,null) !!}</td>
        <td>{{ $client->name }}</td>
        <td>{{ $client->activity }}</td>
        <td>{{ $client->main_activity }}</td>
        <td>{{ $client->status }}</td>
        <td>{{ $client->siren_code }}</td>
        <td>{{ $client->contact_firstname }}</td>
        <td>{{ $client->contact_lastname }}</td>
        <td>{{ $client->email }}</td>
        <td>{{ $client->contact_telephone }}</td>
        <td>{{ $client->address }}</td>
        <td>{{ $client->town }}</td>
        <td>{{ $client->area }}</td>
        <td>{{ $client->region }}</td>
        <td>{{ $client->creation_date }}</td>
        <td>{{ $client->offer_pack_name }}</td>
        <td>{{ $client->password }}</td>
        <td>{{ $client->status }}</td>
    </tr>
    @endforeach
</table>
<div class="col-md-10 text-center">
    <a href="{{ action('AdminController@blockClient') }}" class="btn btn-default">BLOCK</a>
    <a href="{{ action('AdminController@activateClient') }}" class="btn btn-default">ACTIVATE</a>
    <a href="{{ action('AdminController@deactivateClient') }}" class="btn btn-default">ACTIVATE</a>
</div>

这是分步骤的解决方案,它反映了您在评论中向我解释的内容

前言 首先,你将有两个功能,而不是三个,激活和停用,我假设停用等同于阻止用户

现在我想解释一下这是如何工作的,通常当您在Laravel中提交表单时,您可以通过表单发布数据,并在控制器中获取数据以进行进一步处理。在我们的例子中,我们希望更新单个或多个选择,因此我们需要将所有要激活或停用的客户端id传递给控制器

因为我们可能有多个客户机,所以我们需要像您一样将所有选定的客户机作为数组传递给控制器,这很好

在我们的控制器中,我们彻底检查所有选定的客户端,并根据我们的按钮操作激活或停用它们

正如您在下面的快照中所看到的,当我们选择客户端1和2并单击activate时,我们将看到数据库中的表对于两个选定的客户端都更新为1

如何测试它? 对于调试,您可以使用
dd($results)
$this->activateClient($results)之前
单击activate查看提交了哪些数据

“激活”和“停用”按钮都会从
formAction
方法发送相同的选定客户端,但执行的操作不同

解决方案 这将导致以下解决方案:

1-首先,您应该更正接收post的路由,以便我们可以将带有客户端id的复选框传递给控制器函数:

get('admin','AdminController@index');
post('admin/action', array('uses' => 'AdminController@formAction'));
管理员路径将查看所有客户列表,这仅用于演示和学习,然后您可以稍后根据项目结构对其进行更改

2-在您的管理控制器中添加了以下功能,并记住添加
use-App\client
AdminController
中的命名空间之后:

public function index()
{
    $client = Client::all();

    return view('Admin', ['client' => $client]);
}

public function formAction()
{
    $results = Input::get('status');
    if (Input::get('activate'))
    {
        $this->activateClient($results);
    } elseif (Input::get('Deactivate'))
    {
        $this->deactivateClient($results);
    }

    return redirect('admin');
}

public function activateClient($client)
{
    foreach ($client as $clientId)
        Client::findOrNew($clientId)->update(['status' => "1"]);
}

public function deactivateClient($client)
{
    foreach ($client as $clientId)
        Client::findOrNew($clientId)->update(['status' => "0"]);
}
3-创建admin视图调用它admin.blade.php来查看我们的所有客户机,我们可以激活或停用每个客户机,如果我是您,我将在数据库的客户机表中将默认值设置为
零(0)

管理站点|客户端激活和停用页面:

{!!Form::open(数组('url'=>'admin/action')) 挑选 客户端id 客户状态 客户名称 @foreach($客户机作为$clientOutput) {!!Form::checkbox('status[]',$clientOutput->id,false,['id'=>$clientOutput->id]) {{$clientOutput->id} {{$clientOutput->status} {{$clientOutput->client} @endforeach {!!表单::提交('Activate',['name'=>'Activate']) {!!表单::提交('Deactivate',['name'=>'Deactivate']) {!!Form::close()!!}
结果 在我的测试浏览器中,您可以检查一个或多个客户端,并立即激活或停用它们:

我假设您有客户机模型和迁移

注:
这不是生产代码,只是为了演示。不要直接在生产环境中使用它。当您在测试环境中进行测试并运行时,请立即在生产环境中实施。

@smartrahat,您已经做了什么吗?非常感谢。这不仅解决了我的这个问题,我还从这段代码中学到了很多东西。再次感谢你的辛勤工作。
public function index()
{
    $client = Client::all();

    return view('Admin', ['client' => $client]);
}

public function formAction()
{
    $results = Input::get('status');
    if (Input::get('activate'))
    {
        $this->activateClient($results);
    } elseif (Input::get('Deactivate'))
    {
        $this->deactivateClient($results);
    }

    return redirect('admin');
}

public function activateClient($client)
{
    foreach ($client as $clientId)
        Client::findOrNew($clientId)->update(['status' => "1"]);
}

public function deactivateClient($client)
{
    foreach ($client as $clientId)
        Client::findOrNew($clientId)->update(['status' => "0"]);
}
<p>Admin site | client activate and deactivate page:</p>
{!! Form::open(array('url' => 'admin/action')) !!}

<table width="800px">
    <tr>
        <td width="10%">Select</td>
        <td width="20%">Client id</td>
        <td width="20%">Client status</td>
        <td width="50%">Client name</td>
    </tr>

    @foreach ($client as $clientOutput)
        <tr>
            <td>{!! Form::checkbox('status[]', $clientOutput->id, false, ['id' => $clientOutput->id]) !!}</td>
            <td>{{$clientOutput->id}}</td>
            <td>{{$clientOutput->status}}</td>
            <td>{{$clientOutput->client}}</td>
        </tr>
    @endforeach

</table>

{!! Form::submit('Activate', ['name' => 'activate']) !!}
{!! Form::submit('Deactivate', ['name' => 'Deactivate']) !!}
{!! Form::close() !!}