Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
Php 如果表单中签入了一个或多个项目,如何将MySQL字段增加一个?_Php_Mysql_Laravel - Fatal编程技术网

Php 如果表单中签入了一个或多个项目,如何将MySQL字段增加一个?

Php 如果表单中签入了一个或多个项目,如何将MySQL字段增加一个?,php,mysql,laravel,Php,Mysql,Laravel,我有一个页面,用户可以投票选择哪个游戏平台(例如)是最好的。在MySQL中,我有一个这些项目的表。我想更新“计数”字段,并在每次选中指定项时将其设置为+1。 提交表单后,我将获得一个选定项目的数组: array [ 0 => "XBOX" 1 => "PS4" 2 => "PC" ] 现在,我想将这个数组与MySQL字段进行检查和比较,并将它们的计数值增加1。 我试图用这个来比较数组和MySQL,但没有成功 $value = Input::get('platfor

我有一个页面,用户可以投票选择哪个游戏平台(例如)是最好的。在MySQL中,我有一个这些项目的表。我想更新“计数”字段,并在每次选中指定项时将其设置为+1。 提交表单后,我将获得一个选定项目的数组:

array [
  0 => "XBOX"
  1 => "PS4"
  2 => "PC"
]
现在,我想将这个数组与MySQL字段进行检查和比较,并将它们的计数值增加1。 我试图用这个来比较数组和MySQL,但没有成功

$value = Input::get('platform'); //this produces presented array
$test = Platform::where('name', 'LIKE', implode(" ", $value))->get();

我认为你应该使用
where
而不是
where

$test = Platform::whereIn('name', $value)->get();
更新: 您可以通过DB::raw()实现这一点:


我不熟悉您的查询生成器,但在SQL中,您只需执行以下操作:

updatetable_name SET counter=(counter+1),其中name位于('XBOX','PS4',PC')

其中,
table\u name
是您的表名,
counter
是跟踪计数的字段名


这将使每个匹配的平台增加1。

现在可以工作了。如果有人需要代码示例,请看这里。谢谢你们

public function vote()
{

    $value= Input::get('platform');

    $test = Platform::whereIn('name', $value)->get();

    for ($i = 0; $i < count($test); $i++) {
        $test[$i]->count += 1;
        $test[$i]->save();
    }
}
公共功能投票()
{
$value=Input::get('platform');
$test=Platform::其中('name',$value)->get();
对于($i=0;$icount+=1;
$test[$i]->save();
}
}

您应该在
中使用
,而不是像
那样使用
。基本上有两个原因1)您似乎没有实际执行生成的查询,2)查询无效。您应该使用IN(),我已将其更改为IN,并使用
dd($test)
进行了检查,但它显示了一个空数组。您使用的是where吗?还是空的?我想你需要使用foreach循环,它就像一个符咒。可以使用DB::raw()吗?我说的“ok”是指它比使用Laravel查询生成器更安全、更高效吗?或者没有区别…?@harunB10 DB::raw()是Laravel查询生成器的方法…所以你不能比较两个相同的东西。。。您可以比较的是雄辩和查询生成器。。。。。您的方法是使用雄辩的,而上面的是查询生成器。。。查询生成器比雄辩的更高效。这是比较的链接。。。我想回到这个问题上来。我在使用此代码递增字段值时遇到问题。一开始它工作得很好。但随着时间的推移,它会犯错误。。。在MySQL中,我存储了一些值,显示哪个用户投票给哪个项目。。。当我进行查询时:
从'users'中选择COUNT(*),其中vote='PC'
。。这里我得到了值115,但在“平台”表中,我的列计数显示了121(投票)。如果用户同时投票,情况会是这样吗?是线程问题还是其他问题?@harunB10这种差异是否一直存在?随着用户数量的增加,这种差异也在增加。我在这里找到了一些东西——在@Anthony Rutledge的答案上。也许是因为它的类型。现在我把它改成了InnoDB(以前是MyISAM)。现在它运行得很好。干得好。。更新了我的答案,在Laravel做了同样的事情
public function vote()
{

    $value= Input::get('platform');

    $test = Platform::whereIn('name', $value)->get();

    for ($i = 0; $i < count($test); $i++) {
        $test[$i]->count += 1;
        $test[$i]->save();
    }
}