我对我的网络应用程序中的性能和代码组织有疑问。我有一个MySql数据库表:用户(id,un,pass),作者(id,签名...),读者(id ,说明),其中用户中的 id 列对应这两个表中的ID。该DB模型来自ER模型,其中用户是这两者的超类。在我的应用中,我想要一个作者或读者以及来自用户的数据,所以我的第一个问题是:我能做些什么吗在Eloquent模型中的继承可以顺利地做到这一点吗?
我目前的设置是我创建了两个VIEW:作者(加入用户和作者)和读者(加入用户和读者)我打算在Eloquent中将它们与WHERE子句一起使用。这对性能有害吗?我知道MySql使用MERGE algorythm,因此这些查询将在一个SQL命令中翻译,但如果有人有提案,最好的方法是什么,请回答。谢谢!
答案 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)
如果字段可以链接到一个表,则可以使用多态关系。
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
是否存在,您必须先检查用户是否是作者,否则您可能会遇到意外错误。