Laravel 5.8存在一个直通关系问题

时间:2019-12-06 15:06:18

标签: eloquent laravel-5.8 eloquent--relationship

有人可以更正此错误!我已经连续两天敲打它的头了!我从未成功完成过hasOneThrough关系工作,但我决定重试一次。现在,我得到的错误是“调用未定义的方法App \ Models \ OppModels \ opp_main :: hasOneThrough()”。我相信我的问题是本地密钥和外来密钥,但是如果我真的知道问题,那么我可以解决它。我确实意识到我可以将org_id硬编码到我的opp_main表中,但是出于将来的考虑,我真的很想完成这项工作。我的桌子设计是:

---------
opp_main
---------
id
---------

---------
opp_org
---------
id
opp_id
org_id
---------

---------
org_main
---------
id
---------

我的关系看起来像这样(评论来自文档,试图在我的脑海中进行组织):

public function org()
    {
        return $this->hasOneThrough(
            'App\Models\OrgModels\org_main', // Final model
            'App\Models\OppModels\opp_org',  // Intermediate model
            'opp_id',                        // Foreign key on intermediate model
            'id',                            // Foreign key on the final model
            'id',                            // local key
            'org_id'                         // local key of the intermediate model
        );
    }

这就是我的称呼(我尝试过$ item-> org;和$ item-> org();):

public function getAllOpportunities() 
    {
        $opps = opp_main::orderBy('status', 'asc')->get();
        $opps->map(function ($item) {
            $item['org'] = $item->org;
            return $item;
        });

        return response()->json([ 'success' => true, 'data' => $opps ]); 
    }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用文档来安排它。注意与您的解决方案不同的地方

  • Org_main对opp_org具有FK,这在hasOneThrough()中需要 将所需的模型链接到中间模型

org_main

id

opp_org_id


opp_org ID opp_id

org_id


opp_main

id

return $this->hasOneThrough(
    'org_main', // final model
    'opp_org', // intermediate or linking model
    'opp_id', //fk on opp_org linking to opp_main
    'opp_org_id', // fk on org_main linking ot opp_org table,
    'id', //local key on opp_main
    'id', //local key on opp_org / intermediate model
);