我即将开始在CodeIgniter中开发一个新的Web应用程序.过去,我使用DataMapper ORM来满足我的对象映射需求,并且对它的功能完全满意.但是,我的满意度仅限于我的知识.因此,我正在考虑转向学说.
我查看了Doctrine的文档 - 看来你必须非常广泛地定义你的模型; 添加getter和setter,提供方向引用,提供映射等.乍一看,这似乎是与DataMapper ORM直接比较的巨大开销.
任何有两个ORM经验的人都会评论是什么驱使你从一个到另一个吗?
Doctrine对DataMapper ORM无法实现什么关键功能?
手动模型定义是向后还是向前迈出的一步?我认为这是表演的事情.
我在PHP 5.3中使用CI2.0
我刚开始使用"Datamapper ORM",它非常棒!! 然而,关于班级名称,这是一个很大的问题
我有一个名为"users"的数据库表,所以我的dm模型是"用户",而且我有一个名为"user"的控制器?
所以在"用户"控制器中使用"用户"模型是不可能的!
解决这个问题的最佳方法是什么?
非常感谢
最好的祝福
php database codeigniter codeigniter-2 codeigniter-datamapper
我使用 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)
谢谢你。
我在与Codeigniter的DataMapper的关系中遇到了这个问题.我有一个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?
我在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
我是新手,需要一些帮助.我有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) 如何在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) 我一直在与Codeigniter建立关系数据库,发现DataMapper对于严肃的项目来说是无用的.Codeigniter的活动记录是无用的,因为它不提供多对多或一对多的方法.DataMapper速度慢且不可配置!
这似乎是社区的共识.你建议在php中使用纯mysql来执行多对多和一对多的操作吗?或者你认为我错了!请随时告诉我.我的问题是,作为专业的网页设计师,您使用什么来建立数据库?
看起来这应该是容易的部分,但我似乎无法实现这一目标.我created和updated字段没有填充.我已经尝试将字段重命名为不同的字段,但没有去.除了架构和设置类(非常基本),如下所示,我错过了什么?
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) 存储的结果$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) 使用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_by在countries表中添加列还是在数据库检索后使用PHP排序函数?
codeigniter ×10
php ×9
mysql ×4
arrays ×1
database ×1
datamapper ×1
doctrine ×1
foreach ×1
orm ×1