首页 > 解决方案 > Laravel 多态关系 - 与父母一起返回孩子

问题描述

我有一个模型团队,它与 Marketcenters 模型具有多态关系:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Team extends Model
{
    public function teamable()
    {
        return $this->morphTo();
    }
    
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Marketcenter extends Model
{
    public function teams()
    {
        return $this->morphMany('App\Team', 'teamable');
    }
}

我需要检索一个或任何 Marketcenter 的所有团队,以便列出所有团队及其所属的 Marketcenter。

因此,我执行以下代码,并在查询中获得市场中心的团队集合:

$marketcenters = Marketcenter::where('id', $request->user()->marketcenter->id)->with('teams')->get();
    foreach($marketcenters as $marketcenter) {
        dd($marketcenter->teams);
    }

但是当我想用相应的市场中心检索每个团队时,我的问题就出现了:

$marketcenters = Marketcenter::where('id', $request->user()->marketcenter->id)->with('teams')->get();
    foreach($marketcenters as $marketcenter) {
        dd($marketcenter->teams->marketcenter->mc_name);
    }

此集合实例上不存在属性 [marketcenter]。

如何在多态关系中将父数据检索到子记录?

问候

标签: laravellaravel-5

解决方案


我的问题是为什么你想通过像 $marketcenter->teams->marketcenter->mc_name 这样的团队模型访问“marketcenter”,而不是你可以直接在 for 循环中使用 $marketcenter->mc_name ,因为两者都会返回相同的对象。

如果您仍然需要它,那么您必须为 marketcenter->team 设置另一个 foreach 循环,因为您有 morphMany 因此如果您想要市场,它将从团队模型返回您的集合对象,而不是您必须调用返回 morphed 对象的可组合函数可能是 Marketcenter 的模型,也可能不取决于附加到该记录的变形模型


推荐阅读