Codeigniter 帮助 - 控制器中的活动记录和循环

Posted

技术标签:

【中文标题】Codeigniter 帮助 - 控制器中的活动记录和循环【英文标题】:Codeigniter help - active record and looping in controller 【发布时间】:2011-09-26 00:29:48 【问题描述】:

我目前正在使用一个 codeigniter 应用程序,它可以让您根据各种条件过滤作业,但是它不能很好地正常工作,基本上,应该发生的是过滤用户后应该显示结果这种格式,

<section style="display: block;" class="employer">
    <div class="job_holder">
    <img src="http://lcl.doctrine.com/media/uploads/users/large_moovjob_large4.gif"   >
        <dl>
    <dt>2</dt>
    <dd>Matches</dd>
    </dl>
    <!--<a href="" class="fave">Fave</a>-->
    <ul class="job_listings">
            <li> 
                + <a href="http://lcl.doctrine.com/jobwall/getjob/4" class="openjob">
            php Backend Web Developer
                  </a>
    </li>
    <li>
            + <a href="http://lcl.doctrine.com/jobwall/getjob/5" class="openjob">
                Website Designer                            
              </a>
             </li>
             </ul>
     </div>
    </section>

但是我得到的是标记重复了两次,我循环了一个看起来像这样的数组,

    Array
(
    [0] => Array
        (
            [job_id] => 4
            [job_title] => PHP Backend Web Developer
            [salary] => 23000
            [job_tags] => IT,Media
            [retrain] => no
            [job_extras] => We offer a very generous bonus scheme, including a company car, profit bonuses and a pension package.

            [job_summary] => The job consists of a 60/40 spilt of PHP and front end skills, you will be expected to be proficient in, PHP, OO, mysql and javascript
            [job_description] => The job is a 60/40 split between the front and the backend of coding. You will be working within a team of 4 using an inhouse framework and where applicable an in house CMS.

For working hours of 9-5.30 (we try not to stay too late but sometimes this is unnavoidable) you will be paid ?23,000, you will also be given a company car, and 1% of all yearly profits, we will also match any pension contributions that you make.



            [company_name] => Test Company
            [company_summary] => Test company is excatly what it says it is a test company, we have created this test company so that we can see that moovjob is functioning as it should be and that everything is upload, saving, applying and generally saving as we would expect. Hello
            [logo_small] => small_moovjob_small12.png
            [logo_large] => large_moovjob_large4.gif
            [employer_id] => 1
        )

    [1] => Array
        (
            [job_id] => 5
            [job_title] => Website Designer
            [salary] => 28000
            [job_tags] => Media,Marketing
            [retrain] => no
            [job_extras] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [job_summary] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat.us erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [job_description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam enim nisl, sodales dignissim tempus in, placerat id enim. Aenean eget diam velit. Morbi quis erat mi. Donec metus sem, consectetur at malesuada ac, iaculis nec arcu. Morbi libero leo, rhoncus ac vestibulum quis, vehicula nec metus. Vestibulum quis luctus erat. In varius accumsan ornare. Ut ullamcorper bibendum lorem ut elementum.
            [company_name] => Test Company
            [company_summary] => Test company is excatly what it says it is a test company, we have created this test company so that we can see that moovjob is functioning as it should be and that everything is upload, saving, applying and generally saving as we would expect. Hello
            [logo_small] => small_moovjob_small12.png
            [logo_large] => large_moovjob_large4.gif
            [employer_id] => 1
        )

)

我通过执行以下代码循环它,

<?php if(is_array($jobs)) : ?>
<pre><?php print_r($jobs); ?></pre>
<?php $count = count($jobs); ?>
<?php foreach ($jobs as $j) : ?>
    <section class="employer">
        <div class="job_holder">
            <img src="<?php echo base_url(); ?>media/uploads/users/<?php echo $j['logo_large']; ?>"   />
            <dl>
                <dt><?php echo $count; ?></dt>
                <dd>Matches</dd>
            </dl>
            <!--<a href="" class="fave">Fave</a>-->
             <ul class="job_listings">
                    <?php foreach ($jobs as $j) : ?>
                        <?php $job = $j['job_title']; ?>
                        <li>
                            + <a href="<?php echo base_url(); ?>jobwall/getjob/<?php echo $j['job_id']; ?>" class="openjob">
                                <?php echo $job; ?>
                            </a>
                        </li>
                    <?php endforeach; ?>
                </ul>
        </div>
    </section>
<?php endforeach; ?>

基本上我需要做的是呼应公司名称,然后是公司的工作,然后继续前进,它目前正在做的事情是呼应公司名称,然后是它的工作,然后重复自己为$jobs 有 2 个结果,但它们都是针对同一家公司的。

我的模型中的代码如下,

public function search($salary = null, $location = null, $tags = null, $quick_tags = null)

    $this->db->select('job_id, job_title, salary, job_tags, retrain, job_extras, job_summary, job_description,  company_name, company_summary, logo_small, logo_large, employers.employer_id');
    $this->db->from('jobs');
    $this->db->join('employers', 'employers.employer_id = jobs.employer_id', 'left');
    if(isset($salary)) 
        $this->db->where('jobs.salary >=', $salary);
    
    if(isset($location)) 
        $this->db->where('jobs.city', $location);
    
    if(isset($tags)) 
        $this->db->like('jobs.job_tags', $tags);
    
    if(isset($quick_tags) && is_array($quick_tags)) 
        foreach ($quick_tags as $index => $value) 
            if ($index == 0)
                $this->db->like('jobs.job_tags', $value);
            else
                $this->db->or_like('jobs.job_tags', $value);
        
    
    $this->db->group_by('jobs.job_title');
    $query = $this->db->get();
    return $query->result_array();

【问题讨论】:

【参考方案1】:

为了达到像

这样一致的结果
Employer
    job posting 1
    job posting 2
Other employer
    job posting 1

您可能必须先更改查询以按雇主对您的工作进行排序,以确保这些工作被分组在一起。

然后循环遍历您的数据(未经测试的伪代码)

employerCache = '';
for ($jobs as $job) 
   if ($job['company_name'] != employerCache) 
       // display company/employer header
       $employerCache = $job['company_name'];
   
   // display job posting

这将为您提供 1 个循环,而不是同一数据集上的两个嵌套循环

【讨论】:

以上是关于Codeigniter 帮助 - 控制器中的活动记录和循环的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 中的活动数据库是啥? [关闭]

活动记录 CodeIgniter 2 中的这个查询有啥问题?

使用codeigniter将状态从活动状态更新为非活动状态

Codeigniter 中的会话变量不工作

CodeIgniter 活动记录在子查询中的位置

codeigniter - 在控制器中使用帮助器不起作用