Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过vue和laravel更新表中的布尔值_Laravel_Vue.js_Laravel 5 - Fatal编程技术网

无法通过vue和laravel更新表中的布尔值

无法通过vue和laravel更新表中的布尔值,laravel,vue.js,laravel-5,Laravel,Vue.js,Laravel 5,我有一个布尔字段,当我尝试将单个或多个记录从false更新为true时,它可以工作,但当尝试将其更新回false时,它仅适用于第一个记录,并且在不刷新第1页的情况下无法重复同时更新多个记录-处理请求的my vue组件如下所示: <template> <div v-for="(channel, index) in items" :key="channel.id"> <a href="" @click.prevent="toggleVisibility(channel)

我有一个布尔字段,当我尝试将单个或多个记录从false更新为true时,它可以工作,但当尝试将其更新回false时,它仅适用于第一个记录,并且在不刷新第1页的情况下无法重复同时更新多个记录-处理请求的my vue组件如下所示:

<template>
<div v-for="(channel, index) in items" :key="channel.id">
<a href="" @click.prevent="toggleVisibility(channel)">
<i v-if="channel.active" class="fas fa-stop default-stop" data-toggle="tooltip" title="Stop Channel"> 
</i>
<i v-else class="fas fa-play" data-toggle="tooltip" title="Start Channel"></i>
</a>
</div>
</template>

export default {
    name: "Channels",
    props: ['allChannels'],
    data() {
        return {
            items: this.allChannels
        }
    },
    methods: {
        toggleVisibility(channel) {
            axios[channel.active ? 'delete' : 'post'](`/visible-channels/${channel.name}`);
        }
    }
}
我的控制器:

public function activate(Channel $channel, Request $request)
{
    if ($request->method() == 'POST') {
        $channel->update(['active' => true]);
    }
    return back();
}

public function deactivate(Channel $channel, Request $request)
{
    if ($request->method() == 'DELETE') {
        $channel->update(['active' => false]);
    }
}
模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;

class Channel extends Model
{
protected $guarded = [];

protected $casts = [
    'active' => 'boolean',
];

protected static function boot()
{
    parent::boot(); 

    static::updating(function () {
        return Cache::forget('activeChannels');
    });
}

public function getRouteKeyName()
{
    return 'name';
}
}

由于laravel在数据库中将布尔值存储为
1
0
,因此您可能应该在模型中将
活动属性设置为
布尔值

这是因为laravel将
false
视为字符串,所以当您将
active
设置为false时,它会将其与
'false'==true
进行比较,后者是
true
,因此它将
1
存储在数据库中

类通道扩展模型
{
/**
*应强制转换为本机类型的属性。
*
*@var数组
*/
受保护的$casts=[
'活动'=>'布尔',
];
}

我发现只需更改引导功能,等待更新完成

 static::updated(function () {
    return Cache::forget('activeChannels');
});
 static::updated(function () {
    return Cache::forget('activeChannels');
});