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