我有以下表格:
Makes:
id - make_name
Models:
id - model_name - make_id
Trims:
id - trim_name - model_id
Forsale_Cars:
id - trim_id - year - price
我的问题是,如果用户选择(制作ID),我该如何返回该制作下列出的所有裁剪并存在于Forsale_Cars表中?
答案 0 :(得分:1)
在Eloquent中,这对你有用:
$make = Make::find($selectedId);
$trims = $make->trims()->has('forsales')->get();
// returns collection of Trim models that have related row in foresale_cars
// to also load the forsales models you can then do this (load on the collection):
$trims->load('forsales');
// or instead in one chain
$trims = $make->trims()->has('forsales')->with('forsales')->get();
您需要Make
型号上的此关系:
public function trims()
{
return $this->hasManyThrough('Trim', 'Model');
}
其他关系,例如您之前的问题MySQL relation with multiple tables
答案 1 :(得分:0)
您想要显示修剪。所以选择修剪。您只想显示Forsale_Cars中存在的修剪,因此请使用EXISTS(或IN,如果您认为是集合)。您只想显示某些品牌的裁剪。再次使用EXISTS(或IN),因为您可以这样说:其中存在具有指定make的模型(或者模型在该模型的集合中)。
希望这会有所帮助。否则回来你得到的,所以我们可以给你更多的建议。
答案 2 :(得分:0)
在所有表之间进行连接,如下所示,它将为您提供匹配的行
select m.id as makeId,
t.id as trimid,
t.trim_name,
t.model_id
from Makes m
inner join Models mo
on m.id = mo.make_id
inner join Trims t
on t.model_id = mo.id
inner join Forsale_Cars fc
on fc.trim_id = t.id
答案 3 :(得分:0)
你想要
SELECT
*
FROM
Trims t
INNER JOIN -- it will get us only existing
Models m
ON
t.model_id = m.id
INNER JOIN
Forsale_Cars fc
ON
t.id = fc.trim_id
WHERE
m.make_id = <user input>
通过使用INNER JOIN,您将只获得Forsale_Cars中列出的现有修剪。
答案 4 :(得分:-1)
如何仅使用您提供的架构信息(表,属性)来实现此目的并不是很清楚。如果您向我们提供连接表的数据模型,这将更容易。参见:
http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model
推测Models(make_id)是引用Trims和Forsale_Cars中的属性的外键。您应该能够加入这些表并选择您要查找的内容。