我是从 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 进行查询吗?