我有一个相当复杂的用户模式嵌套,我想知道在laravel 4中构建模型的最佳方法。我尝试使用pivot表,但没有成功。对于半性,我在每个表中只放了几个字段。
用户
配置文件
地址
countries
公司
商店
以下是规则:
我不是在寻找写下来的“那个”答案,我做了模型,但在我看来,逻辑不够好。例如,下面是用户和地址类:
class User extends SentryUserModel implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
public function addresses() {
return $this->hasMany('Address');
}
}
class Address extends Eloquent {
public function user() {
return $this->belongsTo('User');
}
}以这种方式构建模型意味着雄辩者希望在address表中找到"user_id“字段。在我看来,使用枢轴表应该更好,因为地址可以属于用户、公司和商店,那么在address表中设置user_id、company_id和shop_id表字段更好,还是使用三个枢轴表(user_address、company_address和商店地址)?
支点表将为用户和公司构建,因为它是一种多方面的关系。
在@MartinBean回答之后,我想感谢他,但是如果我在用户类中使用
public function addresses() {
return $this->morphMany('Address', 'addressable');
}在我使用的Address类中
public function addressable() {
return $this->morphTo();
}通过这种方式,我可以轻松地打印以检索当前的第一个用户地址。
$user->addresses->first()->address并从当前用户的第一个地址检索用户电子邮件。
Address::first()->addressable->email但是你给我指明了正确的方向,我认为,多态关系,只是为了更好地理解它,为什么不支点呢?你认为枢轴对于用户和公司的关系是必要的吗?
发布于 2014-12-01 18:19:24
查看地址,如果希望多态关系也可用于其他模型,则可能希望使用多态关系。这个应该是这样的:
<?php
class Address extends Eloquent {
public function addressable()
{
return $this->morphTo('addressable');
}
}然后在你的其他模型中:
<?php
class User extends Eloquent {
public function addresses()
{
return $this->morphMany('Address', 'addresses');
}
}这里有更多关于多态关系的信息:http://laravel.com/docs/4.2/eloquent#polymorphic-relations
https://stackoverflow.com/questions/27233652
复制相似问题