gpt4 book ai didi

mysql - 带条件的 Laravel ORM

转载 作者:行者123 更新时间:2023-11-28 23:49:16 24 4
gpt4 key购买 nike

我有一张这样的 table -

enter image description here

模型喜欢-

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

class webinar_vote extends Model
{
protected $fillable = array('webinar_id');
protected $table = 'webinar_vote';
protected $primaryKey='webinar_id';
public $timestamps=false;
}

我想要的是,

  1. 如果$input['yes_no_value']为'yes',则仅增加vote_yes
  2. 如果$input['yes_no_value']为“否”,则仅增加vote_no

和类似的模型查询-

    if('yes'==$input['yes_no_value'])
{
webinar_vote::firstOrCreate([
'webinar_id' => $input['uuid']
])->increment('vote_yes');
}
else
{
webinar_vote::firstOrCreate([
'webinar_id' => $input['uuid']
])->increment('vote_no');
}

但主要问题是我无法获得第一票值。

创建条目时,数据不会增加。

创建后,它工作正常。

我做错了什么?

谁能帮帮我?

最佳答案

我不确定我的想法是否正确,但我有一种感觉,当使用 firstOrCreate 时,当没有找到匹配项并创建新记录时,任何链接的方法都会被忽略。

如果您使用 firstOrNew 而不是,如果找到匹配项,它将返回模型的一个实例,或者如果没有找到匹配项,它将返回模型的一个新实例。

$webinarVote = webinar_vote::firstOrNew(['webinar_id' => $input['uuid']]); 

if('yes'== $input['yes_no_value'])
{
$webinarVote->vote_yes = $webinarVote->vote_yes + 1;
}
else
{
$webinarVote->vote_no = $webinarVote->vote_no + 1;
}

$webinarVote->save();

与您的问题无关,但值得注意的是您的类名不符合现代 php 标准。你应该尝试让你的命名约定与 Laravels 一致,它遵循 PSR-1。标准。具体来说:

Class names MUST be declared in StudlyCaps.

关于mysql - 带条件的 Laravel ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32901957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com