【问题标题】:Trying to get property 'brand' of non-object (View: D:\Laravel\Laravel Internship\Laravel file\resources\views\carrental\index.blade.php)试图获取非对象的属性“品牌”(查看:D:\Laravel\Laravel Internship\Laravel file\resources\views\carrental\index.blade.php)
【发布时间】:2020-10-31 22:03:38
【问题描述】:

我有两个模型,并且都与 VehiclesBrand 的外键有一对多的关系,每当我想通过使用像 {{$vehicle->brand->BrandName }} 这样的车辆模型来获取 Tblbrand 的属性时,错误就会出现,当我在 dd() 函数的帮助下输出,它返回真实答案,当我输出 Tblvehicle::all() 时,它返回关系数组为空,我不知道为什么。

1.App\Models\Tblbrand

2.App\Models\Tblvehicle

型号 Tblbrand:

<?php

/**
 * Created by Reliese Model.
 */

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

/**
 * Class Tblbrand
 */
class Tblbrand extends Model
{
    protected $table = 'tblbrands';
    public $timestamps = false;
    protected $primaryKey = 'id';
    protected $dates = [
        'CreationDate',
        'UpdationDate'
    ];

    protected $fillable = [
        'BrandName',
        'CreationDate',
        'UpdationDate'
    ];
    public function vehicle(){
        return $this->hasMany('App\Models\Tblvehicle','VehiclesBrand');
    }
}

模型车:

<?php

/**
 * Created by Reliese Model.
 */

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

/**
 * Class Tblvehicle
 * @package App\Models
 */
class Tblvehicle extends Model
{
    protected $table = 'tblvehicles';
    public $timestamps = false;

    protected $casts = [
        'VehiclesBrand' => 'int',
        'PricePerDay' => 'int',
        'ModelYear' => 'int',
        'SeatingCapacity' => 'int',
        'AirConditioner' => 'int',
        'PowerDoorLocks' => 'int',
        'AntiLockBrakingSystem' => 'int',
        'BrakeAssist' => 'int',
        'PowerSteering' => 'int',
        'DriverAirbag' => 'int',
        'PassengerAirbag' => 'int',
        'PowerWindows' => 'int',
        'CDPlayer' => 'int',
        'CentralLocking' => 'int',
        'CrashSensor' => 'int',
        'LeatherSeats' => 'int'
    ];

    protected $dates = [
        'RegDate',
        'UpdationDate'
    ];

    protected $fillable = [
        'VehiclesTitle',
        'VehiclesBrand',
        'VehiclesOverview',
        'PricePerDay',
        'FuelType',
        'ModelYear',
        'SeatingCapacity',
        'Vimage1',
        'Vimage2',
        'Vimage3',
        'Vimage4',
        'Vimage5',
        'AirConditioner',
        'PowerDoorLocks',
        'AntiLockBrakingSystem',
        'BrakeAssist',
        'PowerSteering',
        'DriverAirbag',
        'PassengerAirbag',
        'PowerWindows',
        'CDPlayer',
        'CentralLocking',
        'CrashSensor',
        'LeatherSeats',
        'RegDate',
        'UpdationDate'
    ];

    public function brand(){
        return $this->belongsTo('App\Models\Tblbrand','id');
    }
    public function booking(){
        return $this->hasMany('\App\Models\Tblbooking');
    }
}

carrental.index.blade.php:

@foreach ($vehicles as $vehicle)
    <div class="col-list-3">
        <div class="recent-car-list">
            <div class="car-info-box"> 
                <a href="{{route('vehicles-details',$vehicle->id) }}">
                    <img src="{{asset('admin/img/vehicleimages')}{{$vehicle->Vimage1 }}" class="img-responsive" alt="image">
                </a>
                <ul>
                    <li>
                        <i class="fa fa-car" aria-hidden="true"></i>{{ $vehicle->FuelType }}
                    </li>
                    <li>
                        <i class="fa fa-calendar" aria-hidden="true"></i>{{ $vehicle->ModelYear}} Model
                    </li>
                    <li>
                        <i class="fa fa-user" aria-hidden="true"></i>{{ $vehicle->SeatingCapacity }} seats
                    </li>
                </ul>
            </div>
            <div class="car-title-m">
                <h6><a href="{{ route('vehicles-details',$vehicle->id) }}" >{{$vehicle->brand->BrandName}}{{ $vehicle->VehiclesTitle }}</a></h6>
                <span class="price">Rs {{ $vehicle->PricePerDay }}/Day</span>
            </div>
            <div class="inventory_info_m">
                <p>{{ $vehicle->VehiclesOverview }}</p>
            </div>
        </div>
    </div>
@endforeach

【问题讨论】:

  • 欢迎来到 Stack Overflow。请使用tour,了解on-topic 是什么,并阅读How to Ask a Good Question。此外,如果给定的答案回答了您的问题,请不要忘记投票并接受它。

标签: php laravel relationship


【解决方案1】:

问题出在Tblvehicle 模型中的关系定义中。您将 id 作为关系定义中的外键引用传递,但 id 不是外键。似乎VehiclesBrand 是外键。所以在关系定义中传递它

public function brand(){
    return $this->belongsTo('App\Models\Tblbrand','VehiclesBrand');
}

您可以将id 作为第三个参数传递,它引用相关模型的主键或其他自定义键。阅读 laravel 关系here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2020-04-16
    • 2019-11-16
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多