2016-05-13 163 views
2

我使用Laravel的DB first()運行查詢,該查詢返回對象,當我使用dd()vardump()進行檢查時。但是,當我嘗試打印使用echo ($promotion->pp_name);它給出錯誤的值,但相同的屬性顯示,同時dd($promotion->pp_name);Laravel DB first()「嘗試獲取非對象的屬性」

<?php dd($promotion->pp_name); ?>打印「緊急」

<?php echo ($promotion->pp_name); ?>但它給「試圖獲得非對象的財產」

全部對象轉儲結果:<?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; 

} 
+0

你可以發佈你的代碼爲這個查詢也轉儲這個對象的代碼嗎? –

+0

嗨@IvankaTodorova我更新了這個對象的返回結果和轉儲的功能,你可以在底部看到。 –

+0

你在哪裏執行函數後的代碼? –

回答

3

您是否在循環中調用此方法?當您執行dd()時,腳本在第一次循環運行後停止並顯示正確的結果,並且一切正常。但是當你在一個循環中進行回聲時,它會繼續下去,我的猜測是,在某個時候你傳遞了一些破壞了方法的損壞數據。

我們需要查看代碼摘錄,您在哪裏調用上述方法來驗證此預感。

+0

是的,我在每個循環中調用這個函數,它從每次迭代中獲得prj-> id感謝您提出這個建議,當某些迭代中沒有找到促銷時,查詢返回null。讓我進一步挖掘 –

0

由於Tadas Paplauskas建議,因爲該函數調用查詢在foreach每個循環中運行,並且在某些迭代中DB :: first()方法返回null,所以echo會出錯。我通過首先檢查值是否已設置來解決此問題。

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