Php CodeIgniter-从n-2-n关系表获取和显示数据
嗨,我想要些帮助。我已经创建了3个数据库表Php CodeIgniter-从n-2-n关系表获取和显示数据,php,mysql,codeigniter,activerecord,fetch,Php,Mysql,Codeigniter,Activerecord,Fetch,嗨,我想要些帮助。我已经创建了3个数据库表 CREATE TABLE IF NOT EXISTS `products` ( `product_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_name` varchar(100) NOT NULL, `category_id` int(10) unsigned NOT NULL, `description` text, PRIMARY KEY (`product_id`) ) ENGIN
CREATE TABLE IF NOT EXISTS `products` (
`product_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`description` text,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
CREATE TABLE IF NOT EXISTS `features` (
`feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`features_name` varchar(100) NOT NULL,
`category_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`feature_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
CREATE TABLE IF NOT EXISTS `product_features` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(10) unsigned NOT NULL,
`feature_id` int(10) unsigned NOT NULL,
`feature_value` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
它们之间的关系是多对多的,因为一个产品可以具有多个特征,并且一个特征可以属于多个产品,但每个产品对每个特征都有特定的值
我的目标是获取属于特定产品的所有功能及其值,然后以一种形式(在我的视图中)显示它们,我可以为产品的功能分配新值或编辑现有值。给你一个我的观点的分类示例:
// Assign new values or edit existing ones
<?php echo form_open(); ?>
<table class="table">
<?php echo form_hidden('product_id', $product->product_id); ?>
<thead>
<tr>
<th> </th>
<th>Feature</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php if(count($features) > 0): foreach($features as $feature): ?>
<tr>
<td><?php echo form_hidden('feature_id[]', $feature->feature_id); ?></td>
<td><?php echo $feature->feature_name; ?></td>
<td><?php echo form_input('value[]',set_value('value[]', $feature->value)); ?></td>
</tr>
<?php endforeach; else: ?>
<tr>
<td colspan="2"><h4 align="center">No Features available</h4></td>
</tr>
<?php endif; ?>
</tbody>
</table>
<div>
<?php echo form_submit('save_feature', 'Save Features', 'class="btn btn-primary"'); ?>
</div>
<?php echo form_close(); ?>
如果没有WHERE语句,结果如下:
feature_id |feature_name | value
1 | Processor | NULL
2 | RAM | NULL
3 | Hard Disk | NULL
但是如果我包含WHERE语句(记住我想要特定产品的值),我就不会得到任何结果。我如何解决这个问题,或者我应该做哪些更改来纠正这些问题???任何帮助都将不胜感激
注1:一点细节:product_features表当前为空,因为还没有分配(我从头开始),所以我想我可能需要动态创建查询
注2:我已经为功能分配了(父)类别id,如计算机、数码相机等,因此我想我还必须为查询指定和类别id,以便获得核心功能。(例如,苹果Imac(电脑类)不应包含光学变焦功能,因为它属于数码相机类)。左键连接
产品功能
打开功能
功能id
=产品功能
功能id
和product\u功能
product\u id
=1
替换where to和如上所述我已经在phpmyadmin中测试过,工作正常!我的问题是,现在如何将其转换为活动记录?CI的用户指南没有任何AND()或类似的功能,请尝试加入('product\u features'、'features.feature\u id=product\u features.feature\u id和product\u features.product\u id=1'、'left')我不太确定它是否与product\u features.product\u id=1一样正确,1是product_id,此值将作为参数在方法中传递(类似于此product_features.product_id=$product_id)。虽然还没有测试过。@Lykos ofc作为
$variable
不是纯粹的1
,但我认为没有必要写下来:D.是的,我只是想提一下。尽管它返回所有特性,甚至是属于其他类别的特性,但它仍然可以工作。我还需要说明它们属于哪个类别,例如它们是否在计算机、数码相机等中(见注2)
feature_id |feature_name | value
1 | Processor | NULL
2 | RAM | NULL
3 | Hard Disk | NULL