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;
}
我想要的是,
- 如果$input['yes_no_value']是'yes',则只递增vote_yes
- 如果$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.
我有一个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;
}
我想要的是,
- 如果$input['yes_no_value']是'yes',则只递增vote_yes
- 如果$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.