在多个关系案例中,Laravel Eloquent ORM中选择哪种关系类型

时间:2014-04-04 06:46:52

标签: orm laravel eloquent table-relationships

我是Laravel的新手,对ORM的一些定义有点困惑。 我目前正在制作一个简单的故障单管理系统,这是我的问题: (表:列,列,......) 门票:id,description,equipment_id 设备:id,name,vendor_id vendor:id,name

根据Laravel的惯例,这是我的表及其关系的非常简短的简历。我该如何建立这些模型?

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

提前谢谢

2 个答案:

答案 0 :(得分:0)

您需要在其模型中声明这些关系。例如您的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;
}

查看laravel docs

的此部分

编辑:针对特定查询向某个供应商开放的票数

Ticket::where('open', '=', 1)->vendor()->where('id', '=', 42);

答案 1 :(得分:0)

zwacky说完全是什么(编辑:最后可能不完全正确)对于亲密关系是真的,但在你的情况下有嵌套关系:

Vendor -> Equipment -> Ticket

然后,要检索特定供应商的票证,您可以在供应商模型上定义关系,如下所示:

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');
  }

并获取供应商的总票数(当前未打开):

Vendor::find($id)   // retrieve particular vendor
  ->tickets()->count(); // get count on tickets table

// and this way you retrieve collection of related tickets
Vendor::find($id)   // retrieve particular vendor
  ->tickets; // get Eloquent Collection

您也可能会发现它有用:http://softonsofa.com/querying-relations-with-eloquent-in-laravel-4/