标签: codeigniter-datamapper

DataMapper ORM与Doctrine

我即将开始在CodeIgniter中开发一个新的Web应用程序.过去,我使用DataMapper ORM来满足我的对象映射需求,并且对它的功能完全满意.但是,我的满意度仅限于我的知识.因此,我正在考虑转向学说.

我查看了Doctrine的文档 - 看来你必须非常广泛地定义你的模型; 添加getter和setter,提供方向引用,提供映射等.乍一看,这似乎是与DataMapper ORM直接比较的巨大开销.

任何有两个ORM经验的人都会评论是什么驱使你从一个到另一个吗?

Doctrine对DataMapper ORM无法实现什么关键功能?

手动模型定义是向后还是向前迈出的一步?我认为这是表演的事情.

php orm doctrine codeigniter codeigniter-datamapper

11
推荐指数
1
解决办法
6233
查看次数

使用codeigniter 2.0和Datamapper时的类名冲突?

我在PHP 5.3中使用CI2.0

我刚开始使用"Datamapper ORM",它非常棒!! 然而,关于班级名称,这是一个很大的问题

我有一个名为"users"的数据库表,所以我的dm模型是"用户",而且我有一个名为"user"的控制器?

所以在"用户"控制器中使用"用户"模型是不可能的!

解决这个问题的最佳方法是什么?

非常感谢

最好的祝福

php database codeigniter codeigniter-2 codeigniter-datamapper

8
推荐指数
2
解决办法
3395
查看次数

错误:您必须使用“set”方法来更新条目修复?

我使用 codeigniter 作为我的 PHP 框架,当我提交我的 from to post 到我的数据库时,我不断收到此错误。

You must use the "set" method to update an entry
Run Code Online (Sandbox Code Playgroud)

我不太确定这意味着什么,从我看过的其他帖子中,每个人都说数据映射器需要为对象分配一个值。

由于我对这一切都很陌生,有人可以给我一个更好的解释。

这是我的代码,它说我有错误:

class Add_book extends CI_Model {

public function add_book($data){

    $this->db->insert('ST_ITM', $data);

}

}

?>
Run Code Online (Sandbox Code Playgroud)

谢谢你。

php codeigniter codeigniter-datamapper

6
推荐指数
1
解决办法
6万
查看次数

CodeIgniter/Datamapper:同一个表的两个一对多关系不起作用

我在与CodeigniterDataMapper的关系中遇到了这个问题.我有一个Interview模型,有一个author_id和一个interviewee_id.它们都与用户模型中的用户ID相关.

我一直在尝试几种方法而没有工作; 这就是我现在所拥有的:

class Interview extends DataMapper
{
  var $has_one = array(
    'interviewee' => array(
      'class' => 'user',
      'other_field' => 'done_interview'),
    'author' => array(
      'class' => 'user',
      'other_field' => 'written_interview') 
  );
}

class User extends DataMapper
{
  var $has_many = array(
    'done_interview' => array(
      'class' => 'interview',
      'other_field' => 'interviewee'),
    'written_interview' => array(
      'class' => 'interview',
      'other_field' => 'author') 
  );
}
Run Code Online (Sandbox Code Playgroud)

我如何让DataMapper知道一个关系将通过author_id,另一个通过interviewee_id

php codeigniter codeigniter-datamapper

5
推荐指数
1
解决办法
666
查看次数

如何使用Datamapper计算Codeigniter中查询返回的行数

我在codeigniter的控制器中使用以下查询.

    $u -> where('us_email_id', $username);
    $u -> where('us_password', $password1);
    $details = $u -> get();
    $total = count($details);
    echo $total; echo "<br>";
    echo count($details);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,"$ u"是数据映射器"User"的类"User"的对象名,其中我的数据库中的表名是"users".我想看看执行查询后返回了多少行.即使用户ID和密码不匹配,"$ total"也始终显示1.我想要的是,如果行数返回1则"ok"否则"出错".我知道它的基本但如果有人知道那么请帮助我.提前致谢.

php codeigniter datamapper codeigniter-2 codeigniter-datamapper

5
推荐指数
2
解决办法
6万
查看次数

CodeIgniter DataMapper ORM v1.8.0 - 如何从多个表中获取记录

我是新手,需要一些帮助.我有2张桌子......

CREATE TABLE `vehicles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vehicle_type` varchar(50) NOT NULL,
  `vehicle_make` varchar(50) NOT NULL,
  `vehicle_model` varchar(50) NOT NULL,
  `vehicle_year` varchar(50) NOT NULL,
  `vin` varchar(50) NOT NULL,
  `registered_state` varchar(10) NOT NULL,
  `license_plate` varchar(20) NOT NULL,
  `insurrance_policy` varchar(50) NOT NULL,
  PRIMARY KEY(`id`)
)
ENGINE=INNODB;

CREATE TABLE `drivers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(50) NOT NULL,
  `last_name` varchar(50) NOT NULL,
  `dob` date NOT NULL,
  `ss_no` varchar(50) NOT NULL,
  `address` varchar(100) NOT NULL,
  `city` varchar(50) NOT NULL,
  `state` …
Run Code Online (Sandbox Code Playgroud)

php mysql codeigniter codeigniter-datamapper

4
推荐指数
1
解决办法
2144
查看次数

比较Codeigniter和MySQL中的两个日期

如何在Codeigniter查询功能中获取两个日期之间的值?这是我的模型和示例代码.

function get_promo() {
    $today = date('Y-m-d');
    $query = $this->db->query('SELECT FROM tbl_event WHERE event_id = $id AND event_startdate <= $today
    AND event_enddate >= $today');
    return $query;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,这是我得到的错误

A Database Error Occurred

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tbl_event WHERE event_id = 36 AND event_startdate <= 2011-06-09 ' at line 1

SELECT FROM tbl_event WHERE event_id = …
Run Code Online (Sandbox Code Playgroud)

mysql codeigniter codeigniter-2 codeigniter-datamapper

2
推荐指数
1
解决办法
2万
查看次数

CodeIgniter DataMapper会变慢吗?

我一直在与Codeigniter建立关系数据库,发现DataMapper对于严肃的项目来说是无用的.Codeigniter的活动记录是无用的,因为它不提供多对多或一对多的方法.DataMapper速度慢且不可配置!

  1. 它在您查询时将整个表加载到对象.
  2. 当您第二次放入"A"时,第二次放入"A"时,您将在数据库中有2个As.它没有像SQL这样的忽略选项.你必须查询一个项目是否存在,如果没有,则插入它.
  3. 他们为此做了大量编码,但对于建立庞大的数据库似乎没有任何好处
  4. 查询速度不快.

这似乎是社区的共识.你建议在php中使用纯mysql来执行多对多和一对多的操作吗?或者你认为我错了!请随时告诉我.我的问题是,作为专业的网页设计师,您使用什么来建立数据库?

php mysql codeigniter codeigniter-datamapper

1
推荐指数
1
解决办法
1864
查看次数

Codeigniter Datamapper自动创建更新的字段

看起来这应该是容易的部分,但我似乎无法实现这一目标.我createdupdated字段没有填充.我已经尝试将字段重命名为不同的字段,但没有去.除了架构和设置类(非常基本),如下所示,我错过了什么?

Codeigniter v2.1.2 Datamapper ORM v1.8.2.1

架构:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

用户类:

<?php

class User extends DataMapper
{

    function User()
    {
        parent::DataMapper();
    }

}
Run Code Online (Sandbox Code Playgroud)

php codeigniter codeigniter-2 codeigniter-datamapper

1
推荐指数
1
解决办法
1807
查看次数

数组被php中的最后一个元素覆盖

存储的结果$g是1和2.下面我写的代码,我的$array['music']商店只有最后一个元素是2.但我想要的是在foreach下执行我的sql查询2次并匹配其值为$g1和2是mu_id(mu_id是另一个表中的列名music)并将第1行和第2行的所有行数据存储到$array['music'].

它仅存储第二行(2)而不是1,或者当它在循环内第二次执行时它会覆盖它.如果有任何逻辑可以使它工作,请告诉我.

    foreach($genre as $g)
    {
        echo $g;
        echo "<br>";
        $array['music'] = $m -> where('mu_id', $g ) -> get();
    }
Run Code Online (Sandbox Code Playgroud)

php arrays foreach codeigniter-datamapper

0
推荐指数
1
解决办法
756
查看次数

CodeIgniter Datamapper ORM是否支持ORDER BY子句中的MySQL CASE语句?

使用Datamapper 1.8.1-dev for PHP的CodeIgniter,我正在尝试构建此查询以在列表顶部优先考虑一个国家/地区名称:

SELECT * FROM countries
ORDER BY CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name
Run Code Online (Sandbox Code Playgroud)

我的国家模型上的PHP(扩展了Datamapper):

$countries = new Country();
$countries->order_by("CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name");
$countries->get_iterated();
Run Code Online (Sandbox Code Playgroud)

而是将Datamapper解析为"CASE"作为表名,构建此语法错误查询:

SELECT * FROM (`countries`)
ORDER BY `CASE` name WHEN 'Australia' THEN 1 ELSE 2 END, `countries`.`name`
Run Code Online (Sandbox Code Playgroud)

我假设CASE案例没有被处理,因为这个流控制语句刚刚添加到MySQL 5中?我唯一的选择是order_bycountries表中添加列还是在数据库检索后使用PHP排序函数?

mysql codeigniter codeigniter-datamapper

0
推荐指数
1
解决办法
1615
查看次数