codeigniter 将数据从视图传递到模型并检索信息
Posted
技术标签:
【中文标题】codeigniter 将数据从视图传递到模型并检索信息【英文标题】:codeigniter pass data from view to model and retrieve info 【发布时间】:2010-12-22 12:23:26 【问题描述】:事情是这样的: 我有从数据库中检索数据并将信息传递给视图的控制器。在视图中,我有一个这样的循环:
foreach ($myphotos->result() as $myphoto)
echo $myphoto->p_id
但在那个循环中,我需要获取 $myphoto->p_id 并要求数据库检索具有此 p_id 的用户。
SELECT * FROM users WHERE u_id IN (SELECT u_id FROM p_votes WHERE p_id = 268);
进入:
foreach ($myphotos->result() as $myphoto)
echo $myphoto->p_id
$this->load->model('m_member');
$users_voted = $this->m_member->getUsersVotedOnImage($myphoto->p_id);
foreach ($users_voted->result() as $users)
echo '<div id="voterfooter">voted:<a href="$users->i_id">'.$users->name.</a>
好吧,这是我提出的一个选项,但还有另一个选项,但是select语句太复杂了!
方法如下: 我已经有了这个:
SELECT * FROM photos WHERE p_id NOT IN (SELECT distinct p_id FROM p_votes where u_id = ".$this->session->userdata('u_id').") LIMIT ".$segment_url.", ".$config['per_page'];
但是如何从用户那里获取对该图片投票的人并将其打印在视图中?
这是数据库方案:
CREATE TABLE IF NOT EXISTS `users` (
`u_id` int(10) unsigned NOT NULL auto_increment,
`fb_id` varchar(255),
`fb_url` varchar(255),
`email` varchar(100),
`username` varchar(100),
`name` varchar(100),
`lastname` varchar(100),
`mini_pic_fb` varchar(255),
`mini_pic` varchar(255),
`country` varchar(100),
`place` varchar(100),
`address` varchar(100),
`nr` int(10),
`postcode` varchar(10),
`pass` varchar(35),
`active` varchar(35),
`activation_code` varchar(42),
PRIMARY KEY (`u_id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `fb_id` (`fb_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ;
CREATE TABLE IF NOT EXISTS `photos` (
`p_id` bigint(20) unsigned NOT NULL auto_increment,
`u_id` bigint(20) unsigned NOT NULL default '0',
`p_date` datetime NOT NULL default '0000-00-00 00:00:00',
`p_content` longtext NOT NULL,
`p_title` text NOT NULL,
`p_photo` text NOT NULL,
`p_small` text NOT NULL,
`p_thumb` text NOT NULL,
`p_up` bigint(20),
`p_down` bigint(20),
PRIMARY KEY (`p_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ;
CREATE TABLE IF NOT EXISTS `p_votes` (
`pv_id` bigint(20) unsigned NOT NULL auto_increment,
`u_id` bigint(20) unsigned NOT NULL,
`p_id` bigint(20) unsigned NOT NULL,
`pv_date` datetime NOT NULL default '0000-00-00 00:00:00',
`pv_ip` varchar(200) NOT NULL,
PRIMARY KEY (`pv_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ;
【问题讨论】:
为了更好的做法:不要在你的视图中使用模型,首先将你需要的所有数据发送到视图。 这是我想避免的,但找不到解决办法! 你需要的是加入!我建议用谷歌搜索这个词。 是的,我可以使用联接,但要联接 3 个表!这可能吗 我怎么看这不是关于 sql 语句,而是关于在 foreach 循环中调用 sql 语句,但从视图中我不想调用模型!如果我在那个 foreach 中可以再调用一个 foreach 会很容易 【参考方案1】:我停止了 MVC 模式,但我不知道如何以其他方式执行此操作! 如果有人知道如何在不破坏 MVC 的情况下做到这一点,请回复! 在视图中:
foreach ($myphotos->result() as $myphoto)
$query = "SELECT * FROM users WHERE u_id IN (SELECT u_id FROM p_votes WHERE p_id = ".$myphoto->p_id.")";
$voters = $this->db->query($query)->result();
echo $myphoto->p_title;
foreach($voters as $row)
echo '<div id="voterfooter">';
echo '<a href="'.base_url().'clanovi/clan/'.$row->u_id.'">';
echo $row->name.' '.$row->lastname.'</a>';
echo '</div>';
【讨论】:
抱歉,我不是 php 专家,但您亲自要求我调查一下……这是一个选项,您可以在控制器中创建列表列表并将其返回到您的视图中吗?[ ($myphoto->p_title, [($row->u_id, $row->name, $row->lastname),($row2...),]), ($myphoto2...,[]), ...]
之类的东西?以上是关于codeigniter 将数据从视图传递到模型并检索信息的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 数据没有从控制器传递到视图 [重复]