在模型和db表之间创建一对多关系

时间:2014-11-12 13:02:10

标签: laravel laravel-4 eloquent

假设我有2个模型PollAnswer。据我所知,我可以通过one-to-many在它们之间建立$this->hasMany('Answers')关系 - 这将使我能够从answers模型访问数据库表Poll

但是,是否有可能在Poll模型和answers表之间创建此关系,而无需创建Answer模型?

修改

其他问题:

  1. 这被认为是一种不好的做法吗?
  2. 如果我不需要使用模型在特定表中提供的所有优点,那么直接使用db表会增强性能吗?

2 个答案:

答案 0 :(得分:1)

创建没有Eloquent模型的关系没有意义。您可以使用数据库外键在没有Laravel的情况下执行此操作。 Eloquent关系(以及一般的ORM)的目的是在调用关系时获取结构化对象。

$answers = $poll->answers;
echo $answers->last()->title;

我们使用OOP来操作原始数据而不是对象,不将数据库映射到实际对象通常是不好的做法。唯一的例外是"技术表"比如日志,会话或工作队列。

表现问题颇具争议。在第一级,是的,您可以通过使用原始请求而不是ORM请求来提高性能,因为您必须管理每个细节。但是在专业的工作中,使用ORM总是更好,因为可读性和可维护性的提高是巨大的。只有在需要使用简单/急切加载管理(http://laravel.com/docs/4.2/eloquent#eager-loading)等优秀工具时,您才可以将时间花在优化上。

最后,如果您想在ORM方法之间编写原始SQL请求,可以使用Eloquent(http://laravel.com/docs/4.2/queries#raw-expressions)来完成。

答案 1 :(得分:0)

1. But is there a possibility to create this relationship just between the Poll model and a answers table, without creating Answer model?

不,没有。您可以使用join来实现您想要的目标。

2. Is this considered a bad practice?

不是真的,但我不明白你为什么不能成为Answer模特课。它使您的代码更具可读性和灵活性。

If i don't need all the advantages that using model gives me in a specific table, will working directly with a db table will enhance preformance?

我不确定,但我认为查询比使用Eloquent更快,我不会说它更好。