此集合实例上不存在属性 [vehiclemodel]在 hasOneThrough 关系中

问题描述

您好,我正在尝试通过 hasOneThrough 关系获取车辆模型,但我的财产失败了,我做错了什么?

表格

车辆
id
颜色
brand_id
品牌
id
名称
车辆模型
id
名称
brand_id

模型

客户

public function Vehicles(){

        return $this->belongstoMany(Vehicle::class);
    }

车辆

public function brand()
    {
        return $this->BelongsTo(Brand::class);
    }

    public function client(){

        return $this->belongstoMany(Client::class);
    }

   public function vehiclemodel(){

      return $this->hasOneThrough(VehicleModel::class,Brand::class,'brand_id','id','brand_id');
    }

品牌

 public function vehicles()
    {
        return $this->hasMany(Vehicle::class);
    }

车辆模型

 public function brand()
    {
        return $this->hasMany(Brand::class);
    }

查询

$Client = Client::find($id);
        foreach($Client->vehicles->vehiclemodel as $c){
            echo $c->name;
        }

解决方法

Laravel Eloquent 关系顾名思义就是“eloquent”。这意味着函数基本上描述了代码的结构。

拥有东西,意味着你拥有的东西知道谁是它的主人,因此额头上写着你的id的东西属于你,而你有一个(hasOne)东西或hasMany(hasMany)。它们之间的区别在于 hasOne 先获取,而 hasMany 获取所有并将它们放入集合中。

归属的工作原理是一样的,手机知道它属于一个人,因为那个人的名字写在屏幕顶部或其他任何地方。

在您的情况下,一个品牌有一个(或有多个)车辆,以及车辆模型。

在您描述的这个特定场景中,车辆和车辆模型都属于一个品牌,但由于它们都“属于”,因此彼此之间没有直接关系。您从一个到另一个的最简单方法是调用 $vehicle->brand->vehicle_model 或反过来。

你也应该能够做到(虽然不推荐,因为它不适合那种关系)使用

$this->hasOneThrough(VehicleModel::class,Brand::class,'id','brand_id','brand_id') 

如果我没记错的话。

belongsToMany 发生在您有多个父级的 id 基础时,通常带有一个中间表,而在这里您没有。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...