我最近开始使用Laravel 5作为框架。到目前为止,一切都是完全直截了当的,它只是伟大的工作与它。然而,目前我遇到了一些麻烦,关于我的口才模型。
数据库表reports
具有以下模式:
| id | group_id | score | ... |
group_id
是引用groups
表的外键。此表的主键是id
和group_id
的组合。id
也不是自动增加的,因为它是一个外部ID,我使用它是为了更容易地进行内部处理。
每个外部id可以在我的每个组中出现一次,并且每个组都有不同的分数,因此是复合主键。
当访问我的一个页面时,我想从外部数据源获取最新的记录,并将它们与相应的数据库行进行匹配。如果它们不存在,我想创建它们。
我目前的路线代码是:
public function showReports ($id)
{
$group = Group::findOrFail($id);
foreach ($group->getLatestReports(20) as $reportElement)
{
$report = Report::find($reportElement['id']);
if (is_null($report))
{
$report = new Report;
// Fill values ...
$report->save();
}
}
}
这显然不能按预期工作,因为它只查找id
(::find($reportElement['id'])
),不适用于group_id
。像往常一样,我的问题,答案可能是超级容易,但我似乎找不到它现在。
3条答案
按热度按时间ct3nt3jp1#
Model::find
只适用于单列键。你可以给它传递一个数组,但这只会让它查找多行。您需要将两个
where
链接在一起来进行查询:jobtbby32#
你可以创建一个Trait MutiPrimaryKey,然后扩展getKey和find方法:1)在App\Classes\Database中创建以下文件MultiPrimaryKey.php
然后你必须为自定义关系分类:2)在App\Classes\Database中创建以下文件HasMultiPKpage.php
然后你需要自定义的BelongsTo 3)在App\Classes\Database\Eloquent\Relations中创建以下文件BelongsToMultiPK.php
bwitn5fc3#
我知道这是一个老职位,但这里是我如何处理它使用本地范围查询
1-在
Model
中:2-要检索模型,请执行以下操作: