gpt4 book ai didi

mysql - Laravel 多态关系问题

转载 作者:行者123 更新时间:2023-11-30 00:34:34 24 4
gpt4 key购买 nike

在此link建议不要使用多态关系

例如,对于此 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,其他问题是:UPDATEDELETE

laravel 有什么方法可以解决这个问题?

更新:现在如何找到帖子所有者?

最佳答案

Laravel 具有多态关系,请参见此处:http://laravel.com/docs/eloquent#polymorphic-relations

您的数据库表设置相同(除了您需要使用 commentable_idcommetnable_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

关于mysql - Laravel 多态关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com