【发布时间】:2020-09-16 01:45:39
【问题描述】:
我真的不明白,帮助我理解。
我正在编写一个应用程序,其中计算 NFL 球队“标记”(标记是 Win/Lose/Tie,抱歉我不知道英文中的那个词),所以我有一个“Marca " Team 模型中的属性,如下所示:
public function getMarcaAttribute() {
...
}
查询很简单,首先我得到球队在本地比赛的比赛次数,然后计算胜负平局,例如,这个是胜利:
$gan += Juego::where('local', $this->id)
->where('score_local', '>', 'score_visitante')
->get()->count();
然后我作为访客对游戏做同样的事情,但当然是反转比较符号。
现在,如果我在数据库中查看,让我们看看亚特兰大 (25) 的西雅图 (38) 比赛
SELECT COUNT(*) FROM juegos WHERE local='atl' AND score_local > score_visitante;
当然,它返回 0。
在ORM中,生成的查询是:
array (
'query' => 'select * from `juegos` where `local` = ? and `score_local` > ? and `score_local` is not null',
'bindings' =>
array (
0 => 'atl',
1 => 'score_visitante',
),
'time' => 0.89,
),
事情是返回 1。我什至将 ->count()->get() 替换为 ->get() 并在结果上执行 foreach:
$gan = Juego::where('local', $this->id)
->where('score_local', '>', 'score_visitante')
->get();
Log::info('Ganados');
foreach ($gan as $g) {
Log::info("$g->score_local > $g->score_visitante");
}
事情正在返回一行,上面写着“25 > 38”
我真的不明白这里发生了什么。有什么想法吗?
【问题讨论】:
-
因为
where正在获取一个“值”并将其与不比较两列的列进行比较......也许你想要whereColumn -
这能回答你的问题吗? Laravel Eloquent Compare Column Values
-
什么???所以它与'score_visitante'作为一个字符串而不是一个列进行比较????这令人沮丧。我以为我在关注文档:laravel.com/docs/5.0/queries#advanced-wheres
-
你使用的是 laravel 5.0?数据严重不足
-
现在我回顾了你所说的以及我在日志中得到的内容是完全有道理的,在绑定中它是一个值,而不是一个列。非常感谢。