【问题标题】:Kohana ORM & MVCKohana ORM 和 MVC
【发布时间】:2011-03-30 11:35:36
【问题描述】:

虽然我在 PHP 方面相当不错,但我对框架还是很陌生。 上周从 CI 开始,这周发现自己在看 Kohana。 在这方面我有几个问题:

  1. 为什么 ORM 与传统 SQL 或主动查询相比?
  2. 如果模型必须从数据库中获取数据,ORM 中的大部分操作是如何发生在控制器中的(或者看起来如此),即($data=$q->where('category', '=', 'articles')->find_all();}
  3. 如何在 ORM 中进行条件查询? (类似 if (isset($_GET['category']))...etc )如果条件被传递给模型?或者控制器应该满足所有条件

仅供参考,我的查询往往有很多连接,我有限的知识告诉我,我应该有一个查询控制器,将查询参数传递给执行查询并返回结果的查询模型。 请让我知道我的理解是否正确 非常感谢

【问题讨论】:

    标签: orm kohana


    【解决方案1】:
    1. ORM 是 DB 层上的某种包装器。因此,您只需调用$user->find($id) 而不是$db->query('select * from users where id='.$id)DB::select()->from('users')->where('id', '=', $id)->limit(1)->execute()。您声明模型参数(表名、关系等)并仅使用模型方法来处理其数据。无需修改大量控制器代码即可轻松更改数据库结构或数据库引擎。

    2. 同意 Ikke,控制器应避免查询条件等模型特定数据。例如,创建方法get_by_category($category)

    3. 参见 #2。你想要的所有参数都应该传递给模型方法(这可以使用链接来完成,比如$object->set_category($category)->set_time_limit(time())->limit(10))。

    【讨论】:

      【解决方案2】:
      1. ORM 只是获取数据的另一种方式。这个想法是有许多常见的操作,并且可以自动化。由于表之间的关系可以很容易地转换为相互引用的对象,因此创建了 ORM。

        是否要使用提供的 ORM 模块取决于您。还有其他常用的(如小枝、果冻和自动建模器)。

      2. 我个人的意见是将这种操作限制在最低限度。非常简单的操作可以通过这种方式完成,因为将它们放在模型中几乎没有任何优势,但最好的方法是尝试将业务逻辑尽可能多地放在模型中。

        另外一点是视图应该是从模型中获取数据的。这样,当您想要重用视图时,只需复制很少的代码。但是为了防止过多的逻辑进入您的视图,建议使用所谓的视图类,其中包含您的视图的逻辑,并且是您的视图与之对话的接口。

      3. 有一个验证库可确保您的模型的所有数据都是正确的。您的模型不应该知道 $_GET 和 $_POST,但是这些数组中的数据可以传递给您的模型。

      【讨论】:

      • 如果我要在其中运行整个查询并将条件也传递给它,您能否描述一下 ORM 模型的外观?
      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2010-09-16
      • 2012-12-11
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多