【问题标题】:How to get an attribute throw a table in Eloquent?如何在 Eloquent 中获取属性抛出一个表?
【发布时间】:2019-04-24 18:26:10
【问题描述】:

我有属于子类别表的请求表属于类别表,那么从请求模型如何从类别中获取属性?

tables

->requests
id
name
subcategory_id


->subcategories
id
name
category_id


->categories
id
name
color

所以我需要从请求模型中获取颜色,我已经创建了树模型

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

    public function color()
    {
        $somemagicstuff;
        
        return $color;
    }
}

【问题讨论】:

  • 请注意,Laravel 中已经有一个名为Request 的类,它在很多地方都使用过。您可能会遇到重复/模棱两可的类解析问题。如果可能,考虑使用不同的名称,或确保通过use 语句和namespacing 正确处理
  • 是的,我知道我总是使用 Request 类的别名
  • Excellent :) 至于你的问题,hasManyThrough() 关系对你有用吗? laravel.com/docs/5.8/eloquent-relationships#has-many-through 供参考。呃等等,我想那可能是倒退了。

标签: php mysql laravel laravel-5 eloquent


【解决方案1】:

你需要定义你的关系:

# Request.php

class Request extends Model
{  
    public function subcategory()
    {    
        return $this->belongsTo(Subcategory::class);
    }
}

-

# Subcategory.php

class Subcategory extends Model
{  
    public function category()
    {    
        return $this->belongsTo(Category::class);
    }
}

那么你可以这样做:

$color = Request::first()->subcategory->category->color;

当然,您可以将计算属性添加到您的 Request 类以方便访问(请记住,这可能会增加查询数量):

# Request.php

class Request extends Model
{  
    public function subcategory()
    {    
        return $this->belongsTo(Subcategory::class);
    }

    public function getColorAttribute()
    {    
        return $this->subcategory->category->color;
    }
}

然后:

$color = Request::first()->color;

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2013-06-04
    • 2020-01-18
    • 2014-10-08
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多