Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter-从n-2-n关系表获取和显示数据_Php_Mysql_Codeigniter_Activerecord_Fetch - Fatal编程技术网

Php CodeIgniter-从n-2-n关系表获取和显示数据

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

嗨,我想要些帮助。我已经创建了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`)
) 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>&nbsp;</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