Laravel 在同一张桌子上放几个模型

Laravel 在同一张桌子上放几个模型,laravel,laravel-4,Laravel,Laravel 4,我需要一个有问题和答案的数据库。我想把这些问题和答案放在同一个名为Post的数据库表中。将有一个字段post_类型,它告诉我post是一个问题或答案 如何在Laravel模型中实现这一点 谢谢。Um只需使用Eloquent将模型映射到该表,就像您使用任何其他模型>表映射一样 然后,您可以简单地调用: // Find the post $post = Post::find(1); // Check if post is question, assuming post_type is boolea

我需要一个有问题和答案的数据库。我想把这些问题和答案放在同一个名为Post的数据库表中。将有一个字段post_类型,它告诉我post是一个问题或答案

如何在Laravel模型中实现这一点


谢谢。

Um只需使用Eloquent将模型映射到该表,就像您使用任何其他模型>表映射一样

然后,您可以简单地调用:

// Find the post
$post = Post::find(1);

// Check if post is question, assuming post_type is boolean/tiny int type
if($post->post_type)
{
  // Post is question if post_type is true
} else {
  // Post is an anwser
}
插入/添加新帖子时,请确保将帖子类型设置为“是否为问题或答案”


这一切都很好,也会起作用,但这是一个糟糕的编程实践。您真的应该将其分为三个表:
Post、Question、Answer
,并在这三个表之间建立关系。

您实际寻找的是单表继承。您可以在此处找到实现此功能的方法:

基本上,按照此方法,您将在
posts
表中有一个名为
object\u class
的字段,这就是您所称的
post\u type
,其中包含在选择post时要实例化的模型的类名

这个方法的好处是,无论使用什么方法来检索模型实例(首先,where,find…),都会实例化正确的类

例如:

// this will return an Answer instance (if the class_name is Answer)
$post = Post::find(1); 

// which will be the same as
$answer = Answer::find(1);

// and this will return nothing
$question = Question::find(1);

你好,凯拉克斯。实际上,为了便于编程,我可以分为3个表,但我认为这会使我在处理搜索函数时遇到更多困难。这就是原因。很高兴知道它成功了。如果它解决了你的问题,别忘了将答案标记为已验证。我会测试并查看你的解决方案是否有效。此外,事实上,Question::find(1)永远不会返回答案实例,再次感谢你,我的错。这个问题发生在我身上,因为我有多个层次结构(SportCar->SportVehicle->Vehicle)。我将编辑我的答案,谢谢!