Laravel DB first()"试图获得非对象的属性"

时间:2016-05-13 06:44:21

标签: php mysql database laravel

当我使用first()dd()进行检查时,我使用Laravel的数据库vardump()运行查询,该数据返回一个对象。但是当我尝试使用echo ($promotion->pp_name);打印该值时,它会出错,但在dd($promotion->pp_name);

时会显示相同的属性

<?php dd($promotion->pp_name); ?>打印&#34; urgent&#34;

<?php echo ($promotion->pp_name); ?>但它提供&#34;尝试获取非对象的属性&#34;

完整对象转储结果:<?php dd($promotion); ?>

    {#196 ▼
  +"ppo_id": 23
  +"ppo_prj_id": 68
  +"ppo_pp_id": 4
  +"ppo_updated_date": "2014-05-20"
  +"ppo_status": 1
  +"pp_id": 4
  +"pp_name": "urgent"
  +"pp_dispText": "I want my project to be marked as an urgent project"
  +"pp_amount": "5.00"
  +"pp_updated_date": "2013-08-09"
  +"pp_status": 1
}

和返回此对象的函数。

function getProjectPromotion($value='')
{
    $project_id = $value; 

    $promotion =     DB::table('project_promotion_option')
                    ->join('project_promotion', 'project_promotion_option.ppo_pp_id', '=', 'project_promotion.pp_id')
                    ->where('ppo_prj_id',  '=' ,  $project_id )
                    ->first(); 

    return $promotion; 

}

2 个答案:

答案 0 :(得分:6)

你是在循环中调用这个方法吗?执行dd()时,脚本会在第一次循环运行后以正确的结果停止,并且一切正常。但是当你在循环中回显时,它会继续,我的猜测是,在某些时候你会传递一些破坏了该方法的损坏数据。

我们需要查看代码摘录,您要调用上述方法来验证此预感。

答案 1 :(得分:0)

正如Tadas Paplauskas所建议的那样,因为函数调用查询在foreach中运行每个循环,并且在某些迭代中DB :: first()方法返回null,因此echo获取错误。我通过首先检查是否设置了值来解决这个问题。

 <?php  if (isset($promotion->pp_name)) {
           echo $promotion->pp_name;
   }  ?>