【发布时间】:2012-12-17 07:25:32
【问题描述】:
我是从 Codeigniter 过来的 Laravel 的新手,在很大程度上我真的很喜欢它,但我真的无法理解 Eloquent。
如果我想做一个这样的简单查询:
SELECT * FROM site INNER JOIN tweeter ON tweeter.id = site.tweeter_id
我尝试做这样的事情(带有“属于”):
$site = Site::with('tweeter')->find($site_id);
但现在我有两个查询和一个不需要的 IN(),如下所示:
SELECT * FROM `site` WHERE `id` = '12' LIMIT 1
SELECT * FROM `tweeter` WHERE `id` IN ('3')
所以我尝试像这样强制加入:
$site = Site::join('tweeter', 'tweeter.id', '=', 'site.tweeter_id')->find($site_id);
现在我收到这样的错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
SQL: SELECT * FROM `site` INNER JOIN `tweeter` ON `tweeter`.`id` = `site.tweeter_id` WHERE `id` = ? LIMIT 1
Bindings: array (
0 => 12,
)
错误在哪里很明显,哪里需要使用“site.id = ?”之类的东西。但无论如何我都看不到要发生这种情况?
所以我只是坚持回到流利和使用:
DB::table('site')->join('tweeter', 'tweeter.id', '=', 'site.tweeter_id')->where('site.id','=',$site_id)->first()
我想这不是一个大问题。我真的很想理解雄辩。我不禁觉得我弄错了,误解了它的工作原理。我错过了什么吗?还是真的必须以非常特定的方式使用它?
我想我真正的问题是:有没有办法使用 Eloquent 进行我想要进行的查询?
【问题讨论】: