是否可以将Laravels HasOne关系也用作HasOneOrZero关系?Laravel有一个一对零或一个雄辩关系吗?
示例: 在docs中,在用户和电话之间描述了HasOne关系。如果每个用户都有或电话,是否可以使用这种解决方案?或者我是否还需要OneToMany relation也允许?
我不知道如果HasOne关系可能会导致任何问题,如果我使用它作为HasOneOrZero关系。
是否可以将Laravels HasOne关系也用作HasOneOrZero关系?Laravel有一个一对零或一个雄辩关系吗?
示例: 在docs中,在用户和电话之间描述了HasOne关系。如果每个用户都有或电话,是否可以使用这种解决方案?或者我是否还需要OneToMany relation也允许?
我不知道如果HasOne关系可能会导致任何问题,如果我使用它作为HasOneOrZero关系。
不可以,HasOne关系可以是null
,它不需要在数据库中有关联行。只要检查一下就可以了。
此外,您可能需要和新的5.5 optional
功能。
它的工作原理就像这样:
optional($user->phone)->number;
如果你有手机,它将返回数量,但如果它是不是会null
而不是Trying to get property of non-object
除了astratyandmitry我想在我问自己究竟HasOne
和HasMany
之间的区别是什么之后,添加了我发现的以下内容。
首先,它们都具有相同的表结构。
用户表:
id | name
1 | Alice
2 | Bob
电话表:
id | user_id | phone
1 | 1 | 123
2 | 2 | 321
方法的hasMany和hasOne在类Model
是相同的,除了对象,他们退货:
public function hasOne($related, $foreignKey = null, $localKey = null)
{
$foreignKey = $foreignKey ?: $this->getForeignKey();
$instance = new $related;
$localKey = $localKey ?: $this->getKeyName();
return new HasOne($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey);
}
和
public function hasMany($related, $foreignKey = null, $localKey = null)
{
$foreignKey = $foreignKey ?: $this->getForeignKey();
$instance = new $related;
$localKey = $localKey ?: $this->getKeyName();
return new HasMany($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey);
}
但是,返回的对象(类HasOne
和类HasMany
)只在3个功能不同:
的getResults()
方法通过神奇__get()
方法每当关系称为不带括号称为(参见here)这样
$user->phone
下面是类hasOne
的getResults()
方法:
public function getResults()
{
return $this->query->first() ?: $this->getDefaultFor($this->parent);
}
因此输出将是
,如果该关系声明为hasOne
public function phone()
{
return $this->hasOne('App\Phone');
}
相反从所述getResults()
方法的类hasMany
由下式给出:
public function getResults()
{
return $this->query->get();
}
,因此输出是一个空集:
如果关系被声明为hasMany
public function phone()
{
return $this->hasMany('App\Phone');
}
因此,如果存在数据库中没有关系排,HasOne
关系将返回null
和astratyandmitry在他的帖子中描述的一个可以处理它。
不幸的是,我找不到方法initRelation()
或方法match()
被调用。
谢谢。但是,也许你应该改变你的第一个'Nope'到'Yes':D. – Adam