私はCodeigniterからやってきたLaravelにかなり慣れていません。ほとんどの場合、私はそれが本当に好きですが、Eloquentに頭を悩ませることはできません。
このような簡単なクエリを実行したい場合:
SELECT * FROM site INNER JOIN tweeter ON tweeter.id = site.tweeter_id
私はこのようなことをしようとします(「に属する」を使用して):
$site = Site::with('tweeter')->find($site_id);
しかし今、私は2つのクエリと実際には必要のない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を使用して作成したいクエリを作成する方法はありますか?