Laravel 5嵌套关系

时间:2016-04-20 20:13:07

标签: php laravel eloquent

我有下表我无法使用订单hasMany产品b / c产品没有外国订单_id。我想通过Invoice访问所有内容,这可能吗?

我尝试使用Has Many Through,但这是A-> B-> C关系,我想我需要设置A-> B< -C Relationship。

用户表

|  id  |

发票表

|  id  |  user_id  | 

订单表

|  id  |  invoice_id  |  product_id  | 

产品表

|  id  |  

我希望通过invoice表格

访问所有数据

发票模型

class invoice extends Model {
    public function user() {  
         return $this->belongsTo('App\User');
    }
    public function order() {
         return $this->belongsTo('App\Order');
    }
}

订购模式

class Order extends Model 
{
    public function invoice()
    {
        return $this->belongsTo('App\Invoice');
    }
}

产品型号

class product extends Model
{
    protected $table = 'products';

    public function order()
    {
        return $this->belongsTo('App\Order');
    }
}

1 个答案:

答案 0 :(得分:1)

根据架构,这就是你的模型的样子。

发票模型

class invoice extends Model {
    public function user() {  
         return $this->belongsTo('App\User');
    }
    public function order() {
         return $this->hasMany('App\Order');
    }
    public function products() {
         return $this->belongsToMany('App\Product', 'order', 'invoice_id', 'product_id');
    }
}

订购模式

class Order extends Model 
{
    public function invoice()
    {
        return $this->belongsTo('App\Invoice');
    }
    public function product()
    {
        return $this->belongsTo('App\Product');
    }
}

产品型号

class product extends Model
{
    protected $table = 'products';

    public function orders()
    {
    public function products() {
         return $this->belongsToMany('App\Invoice', 'order', 'product_id', 'invoice_id');
    }
}

如果这不是您想要的,您可能需要更改架构。