Laravel 有条件的ORM

Laravel ORM with conditions

我有一个table喜欢-

模特喜欢-

    <?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']是'no',则只递增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 而不是,它将 return 如果找到匹配项,则为模型的实例,或者如果没有找到匹配项,则为模型的新实例。

$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();

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

Class names MUST be declared in StudlyCaps.