我之前的问题ceejayoz帮助我指出了正确的方向,但这让我想到了基本上是一个新的问题。
我正在开发一个简单的化学追踪数据库,它的结构是一个化学品表,它可以跟踪大部分信息,但我有几个字段一开始是Enum,但我意识到这是行不通的。现在有单独的桌子为公司,房间和地点。所有这些附加表都只包含一个id和字段,因此公司是:
1名“FISHER”
2.“BDH”
等。
我能做到
$company = chemical::find(4)->company;例如,这将给出该化学品的公司名称,但我要做的是显示一张表格,其中包含每种化学品的所有信息,以及相关公司的名称、房间和位置。我只是不知道如何做到这一点。
我怎么才能得到所有化学品的关联公司?
$chemicals = company::all()->company;不起作用我明白原因了。
$chemicals = chemical::all();
foreach($chemicals as $chem) {
echo $chem->company . "<br />";
} 会给我带来关联公司,这很好,但从综合表的角度来看,我该怎么做呢?
发布于 2016-03-14 01:33:53
您没有指定表company、room和location如何与chemicals相关。但是,如果它们都是belongsTo类型的关系,那么我相信您正在寻找急装
在查询父模型时,雄辩者可以“急切地加载”关系。急切的加载减轻了N+1查询问题。
要急切地加载多个关系,您可以执行以下操作:
$chemicals = chemical::with('company', 'room', 'location')->get();如果您正在使用像Twig或Blade这样的模板引擎(希望是这样),那么您可以将您的$chemicals直接传递给模板。否则,您可以像您在问题中演示的那样,遍历$chemicals:
echo "<table><thead><tr>
<th>Chemical ID</th>
<th>Chemical Name</th>
<th>Company Name</th>
<th>Location Name</th>
<th>Room Name</th>
</tr></thead><tbody>";
foreach($chemicals as $chem) {
echo "<tr><td>{$chem->id}</td>
<td>{$chem->name}</td>
<td>{$chem->company->name}</td>
<td>{$chem->location->name}</td>
<td>{$chem->room->name}</td>
</tr>";
}
echo "</tbody></table>";还请注意,雄辩的惯例是将模型类名(Chemicals,而不是chemicals)大写。
发布于 2016-03-13 23:56:22
这个问题有点不清楚,但是对于一个包含他们公司数据的化学品表来说,你可以做一些类似的事情。在您的控制器中:
// we use with() to "eager load" the company data
// this makes the following line execute two queries
// without the with(), our Blade template will make a query
// to the companies table for EVERY row in the table
// if you have hundreds/thousands of chemicals, you'll
// want to consider paginate() instead of get() too
$chemicals = Chemical::with('company')->get();
return view('your.view')->withChemicals($chemicals);在您的刀片视图中,您可以访问每个化学品公司的所有属性:
<table>
@foreach($chemicals as $chemical)
<tr>
<td>{{ $chemical->name }}</td>
<td>{{ $chemical->company->name }}</td>
</tr>
@endforeach
</table>发布于 2016-03-14 11:23:14
我想,你想要的是:
chemicals: id, company (ENUM), ...现在,您将数据提取到
companies: id, name (same as ENUM in chemicals previously)如果是这样的话,你可以做两件事:
id和company_id的普通关系键和更新您的chemicals表,根据它们的company enum/string值添加适当的company_id值,然后删除company列。它可能需要更多的调整。在任何地方,您调用chemical->company以获取公司名称(变成chemical->company->name)chemicals.company和companies.name字段创建关系。从长远来看,第一个选择肯定会更好。
https://stackoverflow.com/questions/35976712
复制相似问题