试图让非对象的属性,但我可以,如果我回到它inmediatly

试图让非对象的属性,但我可以,如果我回到它inmediatly

问题描述:

我在这里有一个很好的: 即时通讯开发一个API和IM我回值用下面的代码:试图让非对象的属性,但我可以,如果我回到它inmediatly

public function apigetDrugs(){ 
    $arrayreturn= array(); 
    foreach (Drug::all() as $drug){ 
     $array=[ 
      "pharma"=>$drug->pharma->name, 
      "id"=>$drug->id, 
      "code"=>$drug->code, 
      "CABMS_code"=>$drug->CABMS_code, 
      "CABMSDF_code"=>$drug->CABMSDF_code, 
      "name"=>$drug->name, 
      "concentration"=>$drug->concentration, 
      "presentation"=>$drug->presentation->name, 
      "container"=>$drug->container->name, 
      "previous_stock"=>$drug->previous_stock, 
      "added"=>$drug->added, 
      "added_transferred"=>$drug->added_transferred, 
      "exit"=>$drug->exit, 
      "exit_transferred"=>$drug->exit_transferred, 
      "extra"=>$drug->extra, 
      "user"=>$drug->user->name, 

     ]; 
     $arrayreturn[]=$array; 
    } 

    return $arrayreturn; 
    } 

“药物“模型与容器,演示文稿,用户和制药有关系。当我运行我的API时,出现错误“尝试获取非对象的属性”,因此我决定逐一评论每行代码,并且如果我评论制药行,我发现代码运行顺利像这样:

public function apigetDrugs(){ 
    $arrayreturn= array(); 
    foreach (Drug::all() as $drug){ 
     $array=[ 
      //"pharma"=>$drug->pharma->name, 
      "id"=>$drug->id, 
      "code"=>$drug->code, 
      "CABMS_code"=>$drug->CABMS_code, 
      "CABMSDF_code"=>$drug->CABMSDF_code, 
      "name"=>$drug->name, 
      "concentration"=>$drug->concentration, 
      "presentation"=>$drug->presentation->name, 
      "container"=>$drug->container->name, 
      "previous_stock"=>$drug->previous_stock, 
      "added"=>$drug->added, 
      "added_transferred"=>$drug->added_transferred, 
      "exit"=>$drug->exit, 
      "exit_transferred"=>$drug->exit_transferred, 
      "extra"=>$drug->extra, 
      "user"=>$drug->user->name, 

     ]; 
     $arrayreturn[]=$array; 
    } 

    return $arrayreturn; 
    } 

所以我检查了我的制药和药品类的关系,没有错,我可以用药物看到:

class Drug extends Model 
{ 
protected $guarded=[ 
"id", 
"user_id" 
]; 

use SoftDeletes; 
protected $dates = ['deleted_at']; 
// 
public function user(){ 
    return $this->belongsTo("App\User"); 
} 
public function pharma(){ 
    return $this->belongsTo("App\Pharma"); 
} 
public function presentation(){ 
    return $this->belongsTo("App\Presentation"); 
} 
public function unit(){ 
    return $this->belongsTo("App\Unit"); 
} 
public function container(){ 
    return $this->belongsTo("App\Container"); 
} 
} 

,也不符合制药:

class Pharma extends Model 
{ 
// 
protected $guarded=[ 
    "id" 
]; 

public function drugs(){ 
    $this->hasMany("App\Drug"); 
} 
public function user(){ 
    $this->belongsTo("App\User"); 
    } 
} 

然而我f发现一些奇怪的东西。我发现这个代码没有问题,运行和完美的显示是为了表明该字符串:

public function apigetDrugs(){ 
    $arrayreturn= array(); 
    foreach (Drug::all() as $drug){ 
      dd($drug->pharma->name); 
    } 
    } 

如果我取代“回声”,“DD”的功能,它仍然工作。希望能尽快听到你对这个问题的看法。 Luis

+0

嗨LuisE,'dd'肯定会杀死任何后面运行的代码,所以,你的foreach将被执行一次..尝试使用'vardump'代替(是的,它不像laravel那样华丽)。无论如何,确保'$ drug-> pharma'确实已经存在,并且列不能为空。 –

+0

是的,我用dd只是为了知道我在推出什么,它变成了一个完美健康的Pharma对象。该列不是可以空的btw,如果我用“$ drug-> pharma”代替“$ drug-> pharma-> name”,我会在我的json中得到类似这样的内容:“{”pharma“:{”id“ :1, “名”: “镇痛”, “USER_ID”:1, “created_at”:空 “的updated_at”:空}” – LuisE

发现我的问题,我的一颗种子有一个无效的drug_id值。