科哈纳ORM&;MVC

科哈纳ORM&;MVC,orm,kohana,Orm,Kohana,虽然我在PHP方面相当不错,但我对框架还是新手。 上周从CI开始,本周我发现自己在看科哈纳。 在这方面,我有几个问题: 为什么ORM与传统SQL或活动查询相比 如果模型必须从数据库中获取数据,那么ORM中的大多数操作是如何在控制器中发生的(或者看起来是这样的),即($data=$q->where('category','=','articles')->find_all();} 在ORM中如何执行条件查询?(类似于if(isset($\u GET['category'))…等)如果条件被传递到模型

虽然我在PHP方面相当不错,但我对框架还是新手。 上周从CI开始,本周我发现自己在看科哈纳。 在这方面,我有几个问题:

  • 为什么ORM与传统SQL或活动查询相比
  • 如果模型必须从数据库中获取数据,那么ORM中的大多数操作是如何在控制器中发生的(或者看起来是这样的),即(
    $data=$q->where('category','=','articles')->find_all();
    }
  • 在ORM中如何执行条件查询?(类似于if(isset($\u GET['category'))…等)如果条件被传递到模型?或者控制器应该执行所有条件吗
  • 仅供参考,我的查询往往有许多连接,我有限的知识告诉我,我应该有一个查询控制器,将查询参数传递给执行查询并返回结果的查询模型。 请让我知道我的理解是否正确 多谢各位

  • ORM只是获取数据的另一种方式。它的思想是有许多常见的操作,可以自动进行。由于表之间的关系可以很容易地转换为相互引用的对象,所以创建了ORM

    如果您想使用提供的ORM模块,则由您决定。还有其他一些模块也常用(如sprig、jelly和auto modeler)

  • 我个人的观点是将此类操作限制在最低限度。非常简单的操作可以通过这种方式完成,因为将它们放在模型中几乎不会产生任何好处,但最好的方法是尽可能多地将业务逻辑放在模型中

    另一点是,从模型中获取数据的应该是视图。这样,当您想要重用视图时,几乎不需要复制代码。但是为了防止视图中包含太多逻辑,建议使用所谓的ViewClass,它包含视图的逻辑,并且是视图对话的接口。

  • 有一个验证库来确保模型的所有数据都是正确的。模型不应该知道$\u GET和$\u POST,但是这些数组中的数据可以传递给模型

  • ORM只是获取数据的另一种方式。它的思想是有许多常见的操作,可以自动进行。由于表之间的关系可以很容易地转换为相互引用的对象,所以创建了ORM

    如果您想使用提供的ORM模块,则由您决定。还有其他一些模块也常用(如sprig、jelly和auto modeler)

  • 我个人的观点是将此类操作限制在最低限度。非常简单的操作可以通过这种方式完成,因为将它们放在模型中几乎不会产生任何好处,但最好的方法是尽可能多地将业务逻辑放在模型中

    另一点是,从模型中获取数据的应该是视图。这样,当您想要重用视图时,几乎不需要复制代码。但是为了防止视图中包含太多逻辑,建议使用所谓的ViewClass,它包含视图的逻辑,并且是视图对话的接口。

  • 有一个验证库来确保模型的所有数据都是正确的。模型不应该知道$\u GET和$\u POST,但是这些数组中的数据可以传递给模型

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

  • 同意Ikke的意见,控制器应避免查询条件等特定于模型的数据。例如,创建方法
    get\u by\u category($category)

  • 请参阅#2。所有需要的参数都应该传递到模型方法中(这可以通过使用链接来实现,如
    $object->set_category($category)->set_time_limit(time())->limit(10)

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

  • 同意Ikke的意见,控制器应避免查询条件等特定于模型的数据。例如,创建方法
    get\u by\u category($category)

  • 请参阅#2。所有需要的参数都应该传递到模型方法中(这可以通过使用链接来实现,如
    $object->set_category($category)->set_time_limit(time())->limit(10)


  • 如果我在ORM模型中运行整个查询并向其传递条件,您能详细描述ORM模型的外观吗?如果我在ORM模型中运行整个查询并向其传递条件,您能详细描述ORM模型的外观吗?