Laravel Eloquent模型适用于数据库模型

时间:2014-07-31 22:25:08

标签: php mysql sql laravel eloquent

我对我的网络应用程序中的性能和代码组织有疑问。我有一个MySql数据库表:用户(id,un,pass),作者(id,签名...),读者(id ,说明),其中用户中的 id 列对应这两个表中的ID。该DB模型来自ER模型,其中用户是这两者的超类。在我的应用中,我想要一个作者读者以及来自用户的数据,所以我的第一个问题是:我能做些什么吗在Eloquent模型中的继承可以顺利地做到这一点吗?

我目前的设置是我创建了两个VIEW:作者(加入用户作者)和读者(加入用户和读者)我打算在Eloquent中将它们与WHERE子句一起使用。这对性能有害吗?我知道MySql使用MERGE algorythm,因此这些查询将在一个SQL命令中翻译,但如果有人有提案,最好的方法是什么,请回答。谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在两个模型中设置ER。

作为User.php模型中的示例,您应该有一个名为author()

的方法
class User extends Eloquent {

...

  // User has one Author
  public function author()
  {
    return $this->hasOne('Author');
  }

...

}

在您的Author.php模型中,您需要

class User extends Eloquent {

...

  public function user()
  {
    return $this->belongsTo('User', 'id');
  }

...

}

对于Reader.php模型也一样。

您可以查看docs page;)

答案 1 :(得分:0)

如果字段可以链接到一个表,则可以使用多态关系。

Polymorphic relationships

DB Schema:

user
    id - integer
    un - string
    pass - string
    role_id - integer  ; id of a row from either reader or author table
    role_type - string ; either reader or author

reader
    id - integer
    user_id - integer
    description - text

posts
    id - integer
    user_id - integer
    signature - string

user.php的

class User extends Eloquent {
    public function role() {
        return $this->morphTo();
    }
    ...
}

Reader.php

class Reader extends Eloquent {
    public function users() {
        return $this->morphMany('User', 'role');
    }
    ...
}

Author.php

class Author extends Eloquent {
    public function users() {
        return $this->morphMany('User', 'role');
    }
    ...
}

我不确定这是最好的方式。

例如,您永远不能确定$user->role->signature是否存在,您必须先检查用户是否是作者,否则您可能会遇到意外错误。