【问题标题】:Laravel 5.5. - Property [xxxx] does not exist on this collection instance拉拉维尔 5.5。 - 此集合实例上不存在属性 [xxxx]
【发布时间】:2018-06-29 21:33:48
【问题描述】:

我创建了两种方法来发出我想要共享给后台所有视图的 sql 请求:

public function getEntities()
{
    $vcs = Valuechain::select('valuechains.id', 'lang_valuechain.vcname', 'lang_valuechain.vcshortname')
        ->withCount('segments')
        ->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
        ->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
        ->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
        ->where('langs.isMainlanguage', '=', '1')
        ->whereNull('valuechains.deleted_at')
        ->whereNull('sectors.deleted_at')
        ->get();

    return $vcs;
}

public function getEntitiesWithKeyneeds()
{
    $valuechains = Valuechain::orderBy('valuechains.id')
        ->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
        ->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
        ->where('langs.isMainlanguage', '=', '1')
        ->with('segments')
        ->with('keyneeds')
        ->withCount('segments')
        ->withCount('keyneeds')
        ->get();


    foreach ($valuechains as $valuechain) {
        $ids[] = $valuechain->id;
    }

    foreach ($ids as $id) {
        $vcskns[] = Segment::select(
            'lang_valuechain.vcname', 'lang_valuechain.vcshortname',
            'lang_segment.segname', 'lang_segment.segshortname', 'segments.id',
            'lang_segment.created_at', 'lang_segment.updated_at', 'lang_segment.deleted_at'
        )
            ->distinct()
            ->withCount('keyneeds')
            ->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
            ->join('valuechains', 'segments.valuechain_id', '=', 'valuechains.id')
            ->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
            ->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
            ->join('lang_sector', 'sectors.id', '=', 'lang_sector.sector_id')
            ->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
            ->where([
                ['langs.isMainlanguage', '=', '1'],
                ['valuechains.id', '=', $id]
            ])
            ->whereNull('valuechains.deleted_at')
            ->whereNull('sectors.deleted_at')
            ->whereNull('segments.deleted_at')
            ->get();

    }
    return $vcskns;
}

我在另一个返回视图的方法中调用此方法:

public function index(EntityInterface $vcs)
{
    $entitiesLists = $vcs->getEntities();
    $entitiesWithKnLists = $vcs->getEntitiesWithKeyneeds();

    return view('admin.home', compact('entitiesLists', 'entitiesWithKnLists'));
}

我有一个 var_dump,它返回entitiesWithKnLists :

[
   {
        "vcname":"VC1",
        "vcshortname":"VC1",
        "segname":"S1",
        "segshortname":"S1",
        "id":1,
        "created_at":"2018-06-07 09:18:31",
        "updated_at":"2018-06-07 09:18:31",
        "deleted_at":null,
        "keyneeds_count":0
    },
   {
        "vcname":"VC1",
        "vcshortname":"VC1",
        "segname":"S2",
        "segshortname":"S2",
        ... 
    },
   {
        "vcname":"VC2",
        "vcshortname":"VC2",
        "segname":"S3",
        "segshortname":"S3",
        ... 
    },
]

在我看来 vcname 是重复的,我只想显示一次,所以我在我的视图中编写了以下代码:

@foreach($entitiesWithKnLists as $entitiesWithKnList)
    {{ $entitiesWithKnList->first()->vcname  }}<br>
@endforeach

它返回我期望的正确值。

当我想显示“segname”时,我们可以在 var_dump 中看到,我只写类似的东西:

@foreach($entitiesWithKnLists as $entitiesWithKnList)
    {{ $entitiesWithKnList->segname  }}
@endforeach

我收到一条错误消息:

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

谢谢

【问题讨论】:

    标签: laravel-5.5 laravel-blade


    【解决方案1】:

    我终于以这种方式解决了这个问题:

    @foreach($entitiesWithKnLists as $entitiesWithKnList)
        {{ $entitiesWithKnList->first()->vcname }}
        @for ($i=0; $i< count($entitiesWithKnList); $i++ )
            {{  $entitiesWithKnList[$i]->segname }}
        @endfor
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2023-03-03
      • 2022-07-08
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      相关资源
      最近更新 更多