微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决此集合实例上不存在属性 [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 基础时,通常带有一个中间表,而在这里您没有。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。