Laravel-此集合实例上不存在属性

问题描述 投票:0回答:1

因此,我有一个小Laravel汽车项目,并且有两个单独的表,cars表和vehicle_infos表。这是我的CarsController@store

public function store(Request $request)
    {
        $this->validate($request, [
            'naslov' => 'required',
            'marka' => 'required',
            'model' => 'required',
            /*
            'kubikaza' => 'required',
            'zamajac' => 'required',
            'potrosnja' => 'required',
            'karoserija' => 'required',
            'kilometraza' => 'required',
            'godiste' => 'required',
            'gorivo' => 'required',
            'vlasnistvo' => 'required',
            'kilovata' => 'required',
            'konjska_snaga' => 'required',
            'emisiona_klasa' => 'required',
            'pogon' => 'required',
            'mjenjac' => 'required',
            'br_brzina_mjenjaca' => 'required',
            'velicina_felni' => 'required',
            'posjeduje_gume' => 'required',
            'br_vrata' => 'required',
            'br_sjedista' => 'required',
            'str_volana' => 'required',
            'klima' => 'required',
            'boja_spolj' => 'required',
            'boja_unutrasnj' => 'required',
            'materijal_unutrasnj' => 'required',
            'registracija' => 'required',
            'ostecenje' => 'required',
            'zamjena' => 'required',
            'sigurnost' => 'required',
            'oprema' => 'required',
            'stanje' => 'required',
            'nacin_finansiranja' => 'required',
            'nacin_prodaje' => 'required',
            'cijena' => 'required',
            'vrsta_cijene' => 'required',
            'opis_oglasa' => 'required',
            //'fotografije' => 'required',
            //'kontakt' => 'required',
            */
        ]);

        /*
        // Handle File Upload
        if($request->hasFile('fotografije')){
            // Get filename with the extension
            $filenameWithExt = $request->file('fotografije')->getClientOriginalName();
            // Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just ext
            $extension = $request->file('fotografije')->getClientOriginalExtension();
            // Filename to store
            $fileNameToStore= $filename.'_'.time().'.'.$extension;
            // Upload Image
            $path = $request->file('fotografije')->storeAs('public/slike_oglasa', $fileNameToStore);
        } else {
            $fileNameToStore = 'noimage.jpg';
        }
        */

        $images=array();
        if($files=$request->file('fotografije')){
            foreach($files as $file){
                $name=$file->getClientOriginalName();
                $file->move('slike_oglasa',$name);
                $images[]=$name;
            }
        }

        $car = new Car;
        $car->naslov = $request->input('naslov');
        $car->marka = $request->input('marka');
        $car->model = $request->input('model');
        $car->kubikaza = $request->input('kubikaza');
        $car->zamajac = $request->input('zamajac');
        //$car->potrosnja = $request->input('potrosnja');
        $car->karoserija = $request->input('karoserija');
        $car->godiste = $request->input('godiste');
        $car->kilometraza = $request->input('kilometraza');
        $car->gorivo = $request->input('gorivo');
        $car->vlasnistvo = $request->input('vlasnistvo');
        $car->kilovata = $request->input('kilovata');
        $car->konjska_snaga = $request->input('konjska_snaga');
        $car->emisiona_klasa = $request->input('emisiona_klasa');
        $car->pogon = $request->input('pogon');
        $car->mjenjac = $request->input('mjenjac');
        $car->br_brzina_mjenjaca = $request->input('br_brzina_mjenjaca');
        $car->velicina_felni = $request->input('velicina_felni');
        $car->posjeduje_gume = $request->input('posjeduje_gume');
        $car->br_vrata = $request->input('br_vrata');
        $car->br_sjedista = $request->input('br_sjedista');
        $car->str_volana = $request->input('str_volana');
        $car->klima = $request->input('klima');
        $car->boja_spolj = $request->input('boja_spolj');
        $car->boja_unutrasnj = $request->input('boja_unutrasnj');
        $car->materijal_unutrasnj = $request->input('materijal_unutrasnj');
        $car->registracija = $request->input('registracija');
        $car->ostecenje = $request->input('ostecenje');
        $car->zamjena = $request->input('zamjena');
        $car->sigurnost = implode(',', $request->input('sigurnost'));
        $car->oprema = implode(',', $request->input('oprema'));
        $car->stanje = implode(',', $request->input('stanje'));
        $car->nacin_finansiranja = $request->input('nacin_finansiranja');
        $car->nacin_prodaje = $request->input('nacin_prodaje');
        $car->cijena = $request->input('cijena');
        $car->vrsta_cijene = $request->input('vrsta_cijene');
        $car->opis_oglasa = $request->input('opis_oglasa');
        //$car->user_id = 1;
        $car->user_id = auth()->user()->id;
        $car->fotografije =  implode("|", $images);
        $car->trajanje_oglasa = $request->input('trajanje_oglasa');
        $car->placeni_status = $request->input('placeni_status');

        if($car->trajanje_oglasa == 30){
            $car->to_datum_isteka = Carbon::now()->addDays(30);
        } else {
            $car->to_datum_isteka = Carbon::now()->addDays(60);
        }

        if($car->placeni_status == 0){
            $car->po_datum_isteka = Carbon::now();
        } else if($car->placeni_status == 1) {
            $car->po_datum_isteka = Carbon::now()->addDays(7);
        } else if($car->placeni_status == 2) {
            $car->po_datum_isteka = Carbon::now()->addDays(14);
        } else if($car->placeni_status == 3) {
            $car->po_datum_isteka = Carbon::now()->addDays(21);
        }
        //$car->kontakt = $request->input('kontakt');
        $car->save();

        $vehicleinfo = new VehicleInfo;
        //$vehicleinfo->urban = "Urban";
        $vehicleinfo->car_id = $car->id;
        $vehicleinfo->save();

        //ukupno oglasa od strane usera, skladistenje u ads table
        $ad = new Ad;
        $ad->car_id = $car->id;
        //$ad->user_id = 1;
        $ad->user_id = auth()->user()->id;
        $ad->save();

        return redirect('/cars');
}

我的模型Car.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Car extends Model
{

    protected $table = "cars";
    protected $primaryKey = "id";

    protected $fillable = [
        'naslov', 'marka', 'model', 'kubikaza', 'zamajac', 'karoserija', 'godiste', 'kilometraza', 'br_brzina_mjenjaca',
        'gorivo', 'vlasnistvo', 'kilovata', 'konjska_snaga', 'emisiona_klasa', 'pogon', 'mjenjac', 'br_vrata', 'velicina_felni', 'posjeduje_gume',
        'br_sjedista', 'str_volana', 'klima', 'boja_spolj', 'boja_unutrasnj', 'materijal_unutrasnj', 'registracija', 'ostecenje',
        'zamjena', 'sigurnost', 'oprema', 'stanje', 'nacin_finansiranja', 'nacin_prodaje', 'cijena', 'vrsta_cijene', 'opis_oglasa', 'fotografije'
    ];

    public function user(){
        return $this->belongsTo(User::class);
    }

    public function vehicleinfo(){
        return $this->hasMany(VehicleInfo::class);
    }

    public function ad(){
        return $this->hasMany(Ad::class);
    }
}

我的模型VehicleInfo.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class VehicleInfo extends Model
{
    protected $table = 'vehicle_infos';
    protected $primaryKey = 'id';

    protected $fillable = ['car_id', 'urban', 'extra_urban', 'combined', 'length', 'width', 'height'];

    public function car(){
      return $this->belongsTo(Car::class);
    }
}

所以我的car_id表中的vehicle_infos来自public function store()CarsController,它会自动在vehicle_infos中存储新数据,没关系。

但是当我执行php artisan tinker检查我的关系时,它显示我错误。这就是我在php artisan tinker中所做的事情:

[第一步:$car = App\Car::find(4);,它显示了该车的所有数据,然后显示了$car->vehicleinfo,它显示了vehicle_infos表中car_id4的所有数据。

例如,但是当我执行$car->vehicleinfo->urban时,它显示了此错误Exception with message 'Property [urban] does not exist on this collection instance.'。我做错了什么?请帮助我,这令人沮丧。

php laravel collections properties instance
1个回答
0
投票

您好,您可以尝试将find()替换为find()->first()或将$car->vehicleinfo->urban替换为$car->vehicleinfo[´urban’]

[而且我的眼睛看到这行urban被注释是正常的,如果您在注释行中推送数据,则实例urban的集合不存在。通常情况下,sql会否要求您将自己列为城市?

此行对urban有评论`

    $vehicleinfo = new VehicleInfo;
    //$vehicleinfo->urban = "Urban";
    $vehicleinfo->car_id = $car->id;
    $vehicleinfo->save(); `
© www.soinside.com 2019 - 2024. All rights reserved.