首页 > 解决方案 > Laravel - 未定义的属性:stdClass - 搜索查询

问题描述

所以我有这个带有搜索功能的 Laravel 汽车项目。我使用DB::table()查询进行搜索,并且在添加model relationship. 我会解释,这是我的代码。

这是我的搜索motoopremapretraga功能:

/**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     */
    public function motoopremapretraga(Request $request)
    {
        $autoQuery = DB::table('motoopremas');

        //pretraga - marka i model
        foreach ($request->only(['marka', 'model']) as $term => $value) {
            if (empty($value)) {
                continue;
            }
            $autoQuery->where($term, $value);
        }

        //pretraga - cijena od/do whereBetween
        if (
            $cijenaod = (int)$request->input('cijenaod')
            && $cijenado = (int)$request->input('cijenado')
        ) {
            $autoQuery->whereBetween('cijena', [(int)$cijenaod = $request->input('cijenaod'), (int)$cijenado = $request->input('cijenado')]);
        }

        //pretraga - vrsta cijene
        if ($vrsta_cijene = $request->get('vrsta_cijene')) {
            $autoQuery->where('vrsta_cijene', $vrsta_cijene);
        }

        //pretraga - grupa opreme
        if ($grupa_opreme = $request->get('grupa_opreme')) {
            $autoQuery->where('grupa_opreme', $grupa_opreme);
        }

        //pretraga - djelovi
        if ($tip = $request->get('tip')) {
            $autoQuery->where('tip', $tip);
        }

        //pretraga - ostecenje
        if ($ostecenje = $request->get('ostecenje')) {
            $autoQuery->where('ostecenje', $ostecenje);
        }

        //pretraga - zamjena
        if ($zamjena = $request->get('zamjena')) {
            $autoQuery->where('zamjena', $zamjena);
        }

        //pretraga - stanje
        if ($stanje = $request->get('stanje')) {
            $autoQuery->where('stanje', $stanje);
        }

        //vracanje rezultata
        $automobili = $autoQuery->get();

        return view('site.motooprema.pretraga')->with('automobili', $automobili);
    }

你看我DB::table('motoopremas')用来从搜索中找到我的结果,最后只是$automobili = autoQuery->get();指定我的刀片变量。

好的,那么这results blade view很简单,只是为了显示一切是否正常:

@foreach($automobili->where('deleted_at', null) as $auto)
{{$auto->naslov}}
@endforeach

一切正常,但是当我Motooprema.php像这样从我的模型中添加我的关系时:

@foreach($automobili->where('deleted_at', null) as $auto)
<!-- this is my relationship -->
@if($auto->sifraMotoopremaaktivnosts->first()->status == 1)

{{$auto->naslov}}

@endif
@endforeach

它给了我这样的错误

Undefined property: stdClass::$sifraMotoopremaaktivnosts

这是我Motooprema.php与这种sifraMotoopremaaktivnosts关系的模型:

public function sifraMotoopremaaktivnosts()
    {
        return $this->hasMany(Motoopremaaktivnost::class, 'sifra_id', 'id');
    }

我不知道自己做错了什么,我需要进行此搜索,而这种关系只是显示激活的汽车帖子。我应该怎么办 ?

标签: phplaraveleloquentrelationshipstdclass

解决方案


DB::table不返回Motooprema类。

因此,您不能使用关系。( $auto->sifraMotoopremaaktivnosts... )

$autoQuery = DB::table('motoopremas');将该行替换为$autoQuery = Motooprema::query();,它应该返回一个Motooprema.


推荐阅读