不要使用Polymorphic Relations
例如,对于此Sql命令,我们必须没有FOREIGN KEY
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
comment TEXT NOT NULL,
issue_type VARCHAR(15) NOT NULL CHECK (issue_type IN (`Bugs`, `Features`)),
issue_id INT NOT NULL,
FOREIGN KEY issue_id REFERENCES ???
);
然后我们必须有:
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
comment TEXT NOT NULL,
issue_type VARCHAR(15) NOT NULL CHECK (issue_type IN (`Bugs`, `Features`)),
issue_id INT NOT NULL,
);
此命令在使用JOIN
或同时使用JOIN
时遇到问题,例如:
SELECT * FROM Comments c
LEFT JOIN Bugs b ON (c.issue_type = 'Bugs' AND c.issue_id = b.issue_id)
LEFT JOIN Features f ON (c.issue_type = 'Features' AND c.issue_id = f.issue_id);
这些问题仅适用于SELECT
其他问题:UPDATE
,DELETE
更新 如何找到帖子所有者?
答案 0 :(得分:0)
Laravel有多态关系,见这里:http://laravel.com/docs/eloquent#polymorphic-relations
您的数据库表设置相同(除非您需要使用commentable_id
和commetnable_type
来处理以下代码示例),并且在您的模型中执行以下操作:
class Comment extends Eloquent {
public function commentable()
{
return $this->morphTo();
}
}
class Bug extends Eloquent {
public function comments()
{
return $this->morphMany('Comment', 'commentable');
}
}
class Feature extends Eloquent {
public function comments()
{
return $this->morphMany('Comments', 'commentable');
}
}
然后您可以使用它:
$bug = Bug::find(1)->comments();
你也可以采取其他方式,所以如果你只是获取一个评论列表,那么你可以获得该评论的所有者,而不知道它是什么:
$comment = Comment::find(1);
$commentable = $comment->commentable;
// this will load the bug or feature that the comment belongs to