在Laravel雄辩ORM中,在多重关系案例中选择哪种关系类型

在Laravel雄辩ORM中,在多重关系案例中选择哪种关系类型,orm,laravel,eloquent,table-relationships,Orm,Laravel,Eloquent,Table Relationships,我对Laravel不熟悉,对ORM的一些定义有点困惑。 我目前正在开发一个简单的故障单管理系统,下面是我的问题: (表:列,列,…) 票证:id、说明、设备\u id 设备:id、名称、供应商id 供应商:id,名称 这是我的表格及其关系的一份非常简短的简历,遵循拉雷维尔的惯例。如何构建这些模型 基本上,我需要检索,例如,向某个供应商打开了多少票据(我打了多少次电话给供应商寻求支持) 提前感谢您需要在他们的模型中声明这些关系。e、 g.您的Ticket.php模型可能如下所示: class Ti

我对Laravel不熟悉,对ORM的一些定义有点困惑。 我目前正在开发一个简单的故障单管理系统,下面是我的问题: (表:列,列,…) 票证:id、说明、设备\u id 设备:id、名称、供应商id 供应商:id,名称

这是我的表格及其关系的一份非常简短的简历,遵循拉雷维尔的惯例。如何构建这些模型

基本上,我需要检索,例如,向某个供应商打开了多少票据(我打了多少次电话给供应商寻求支持)


提前感谢

您需要在他们的模型中声明这些关系。e、 g.您的
Ticket.php
模型可能如下所示:

class Ticket extends Eloquent {

    public function equipment()
    {
        return $this->hasOne('Equipment');
    }

    public function vendor()
    {
        return $this->hasOne('Vendor');
    }

    ...
}
foreach (Ticket::all() as $ticket) {
    $ticket->vendor()->id;
}
class Vendor extends Eloquent {
  public function equipment()
  {
    return $this->hasMany('Equipment');
  }
  public function tickets()
  {
    return $this->hasManyThrough('Ticket', 'Equipment');
  }


class Equipment extends Eloquent {
  public function tickets()
  {
    return $this->hasMany('Ticket');
  }
  public function vendor()
  {
    return $this->belongsTo('Vendor');
  } 


class Ticket extends Eloquent {
  public function equipment()
  {
    return $this->belongsTo('Equipment');
  }
对于检索,您可以这样做:

class Ticket extends Eloquent {

    public function equipment()
    {
        return $this->hasOne('Equipment');
    }

    public function vendor()
    {
        return $this->hasOne('Vendor');
    }

    ...
}
foreach (Ticket::all() as $ticket) {
    $ticket->vendor()->id;
}
class Vendor extends Eloquent {
  public function equipment()
  {
    return $this->hasMany('Equipment');
  }
  public function tickets()
  {
    return $this->hasManyThrough('Ticket', 'Equipment');
  }


class Equipment extends Eloquent {
  public function tickets()
  {
    return $this->hasMany('Ticket');
  }
  public function vendor()
  {
    return $this->belongsTo('Vendor');
  } 


class Ticket extends Eloquent {
  public function equipment()
  {
    return $this->belongsTo('Equipment');
  }
检查本节的内容

编辑:对于特定的查询,有多少票证是向某个供应商开放的:


zwacky所说的对于亲密关系来说是完全正确的(编辑:最后可能不完全正确),但在您的情况下,存在嵌套关系:

Vendor -> Equipment -> Ticket
然后,要检索特定供应商的票据,您需要在供应商模型上定义如下关系:

class Ticket extends Eloquent {

    public function equipment()
    {
        return $this->hasOne('Equipment');
    }

    public function vendor()
    {
        return $this->hasOne('Vendor');
    }

    ...
}
foreach (Ticket::all() as $ticket) {
    $ticket->vendor()->id;
}
class Vendor extends Eloquent {
  public function equipment()
  {
    return $this->hasMany('Equipment');
  }
  public function tickets()
  {
    return $this->hasManyThrough('Ticket', 'Equipment');
  }


class Equipment extends Eloquent {
  public function tickets()
  {
    return $this->hasMany('Ticket');
  }
  public function vendor()
  {
    return $this->belongsTo('Vendor');
  } 


class Ticket extends Eloquent {
  public function equipment()
  {
    return $this->belongsTo('Equipment');
  }
以及获取供应商的总票数(当前未打开):


您也会发现它很有用:

谢谢您的帮助。我在尝试获取非对象的属性时遇到错误
。。。我是否应该在其他课程(设备和门票)中建立任何反向关系?检查编辑后的答案,现在你有了所有的关系使其工作。完美!注释:您将方法编写为
public class
,而不是
public function
。非常感谢你!