laravel - 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]。
如何在多态关系中将父数据检索到子记录?
问候
解决方案
我的问题是为什么你想通过像 $marketcenter->teams->marketcenter->mc_name 这样的团队模型访问“marketcenter”,而不是你可以直接在 for 循环中使用 $marketcenter->mc_name ,因为两者都会返回相同的对象。
如果您仍然需要它,那么您必须为 marketcenter->team 设置另一个 foreach 循环,因为您有 morphMany 因此如果您想要市场,它将从团队模型返回您的集合对象,而不是您必须调用返回 morphed 对象的可组合函数可能是 Marketcenter 的模型,也可能不取决于附加到该记录的变形模型
推荐阅读
- tensorflow - 如何在 Tensorflow 中为 BERT 标记器指定输入序列长度?
- android - 安卓——亚马逊SQS;状态码:403;错误代码:InvalidClientTokenIdAWS
- vue.js - 使用 NuxtLink 时,如何在导航前执行存储突变?
- javascript - 我想在输入集中在 React 中时更改样式
- npm-link - 我可以使用“npm-link”将包与我的项目链接起来。但是,在浏览器中,某些更改无法正确反映
- python - 请帮助:AttributeError:'str'对象没有属性'write'
- python - MongoEngine (python) - 扩展文档类不起作用
- mysql - 如何将多个mysql行组合成一个JSON数组
- python - 如何链接这两个 pygame 菜单
- mongodb - Docker MongoDB-> chown:更改 * 的所有权:不允许操作