Cakephp - 使用'foreach'显示数据不会返回任何值

时间:2016-10-04 08:22:55

标签: php database cakephp foreach

我正在尝试消化一个cakephp教程,昨天我卡住了。示例网站名为Jobfinds,因此我将表名称为“jobs”。

以下是JobsController的代码:

    <?php
    namespace App\Controller;

    use App\Controller\AppController;

    class JobsController extends AppController{


    public $name = 'Jobs';

    /*
     * Default Index Method
     */

public function index() {
    //Set Query Options
    $options = array(
        'order' => array('Jobs.created' => 'asc' ),
        'limit' => 4
    ); 

    //Get Job Info

    $jobs = $this->Jobs->find('all', $options);

    $this->set('jobs', $jobs);
  }
}
?>

此代码位于index.ctp中,但它不显示任何内容,但它应该显示。

<?php foreach($jobs as $job) : ?>
<p><?php  echo $job['jobs']['title'];
 ?> </p>
<?php endforeach; ?>

当我举个例子时

<?php echo "something"; ?>

然后显示'某事',所以我认为必须有一个小错误,就是不能从表中获取数据。我试了太久了。因为那个我开始失去我的头发。这个教程非常棒但是使用了cakephp 2.x而且我使用的是3.x.所以在每一步我需要改变一些东西,直到现在我都成功了,但我坚持这一点。任何人都可以看到罪魁祸首在哪里?为什么它不从表中获取数据?

我在调试LOGS中没有错误。

内部循环中的

print_r($ job)如下所示

    Cake\ORM\Entity Object ( [id] => 1 [category_id] => 7 [user_id] => 1          [type_id] => 1 [company_name] => Tech Guy Computer Services [title] => Senior Graphic Designer [description] =>

Lorem ipsum dolor sit amet(more description in lorem ipsum

[city] => Burlington [state] => MA [contact_email] => contact@employer.com [created] => Cake\I18n\FrozenTime Object ( [time] => 2014-07-14T00:00:00+00:00 [timezone] => UTC [fixedNowTime] => ) [[new]] => [[accessible]] => Array ( [*] => 1 ) [[dirty]] => Array ( ) [[original]] => Array ( ) [[virtual]] => Array ( ) [[errors]] => Array ( ) [[invalid]] => Array ( ) [[repository]] => Jobs )
Cake\ORM\Entity Object ( [id] => 2 [category_id] => 7 [user_id] => 1 [type_id] => 1 [company_name] => Tech Guy Computer Services [title] => UX Designer [description] =>

3 个答案:

答案 0 :(得分:0)

试试这段代码,它会帮助你。

<?php foreach($jobs as $job) : ?>
 <p><?php  echo $job['title'];?></p>
<?php endforeach; ?>

谢谢!

答案 1 :(得分:0)

foreach($jobs as $job)中,此处$job是实体对象,而不是简单数组。您可以按$job->title检索标题值。你的代码应该是

<?php foreach($jobs as $job) : ?>
 <p><?php  echo $job->title;?></p>
<?php endforeach; ?>

答案 2 :(得分:0)

CakePhp 3完全基于ORM。对象关系映射。

因此,您可以使用$job->title;

访问它

另请注意,它也不会提供实际的型号名称。如果你想获得数组,那么在控制器的查询结束时你可以使用

$jobs = $this->Jobs->find('all', $options)->toArray();

确实你应该使用     $jobs = $this->Jobs->find()->limit(4)->order(array('Jobs.created' => 'asc' ))->toArray();