试图让非对象的属性,但我可以,如果我回到它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
答
发现我的问题,我的一颗种子有一个无效的drug_id值。
嗨LuisE,'dd'肯定会杀死任何后面运行的代码,所以,你的foreach将被执行一次..尝试使用'vardump'代替(是的,它不像laravel那样华丽)。无论如何,确保'$ drug-> pharma'确实已经存在,并且列不能为空。 –
是的,我用dd只是为了知道我在推出什么,它变成了一个完美健康的Pharma对象。该列不是可以空的btw,如果我用“$ drug-> pharma”代替“$ drug-> pharma-> name”,我会在我的json中得到类似这样的内容:“{”pharma“:{”id“ :1, “名”: “镇痛”, “USER_ID”:1, “created_at”:空 “的updated_at”:空}” – LuisE