2017-05-06 98 views
1

我正在使用Laravel 5.1: 我有一個名爲Muestra的模型,有4個外鍵/關係,一對多與Ganado,TipoMuestra ,TipoConsulta和Laboratorio。當我從一個表單在guardarNueva()創建一個名爲$ muestra的Muestra元素時,問題出現了,它調用$ muestra-> setTipoConsulta/Laboratorio/TipoMuestra(),它調用該函數並引發錯誤:Laravel 5調用未定義的方法Illuminate Database Query Builder :: muestras()

BadMethodCallException in Builder.php line 2123: 
Call to undefined method 
Illuminate\Database\Query\Builder::muestras() 
in Builder.php line 2123 
at Builder->__call('muestras', array()) 
at call_user_func_array(array(object(Builder), 'muestras'), array()) 
in Builder.php line 1015 
at Builder->__call('muestras', array()) 
at call_user_func_array(array(object(Builder), 'muestras'), array()) 
in Model.php line 3444 
at Model->__call('muestras', array()) in Muestra.php line 51 
at Muestra->setTipoConsulta(object(TipoConsulta)) in Muestra.php line 65 
at Muestra::guardarNueva(object(Request)) in MuestrasController.php line 48 

Muestra模型代碼是:

class Muestra extends Model 
{ 
protected $fillable = ['tubo']; 
protected $dates = ['fecha_extraccion']; 

public function ganado() 
{ 
    return $this->belongsTo(Ganado::class); 
} 

public function tipo_muestra() 
{ 
    return $this->belongsTo(TipoMuestra::class); 
} 

public function tipo_consulta() 
{ 
    return $this->belongsTo(TipoConsulta::class); 
} 

public function laboratorio() 
{ 
    return $this->belongsTo(Laboratorio::class); 
} 

public function setFechaExtraccion($date) 
{ 
    $this->fecha_extraccion = $date; 
    $this->save(); 
    return $this->fecha_extraccion; 
} 

public function setLaboratorio($laboratorio){ 
    return $laboratorio->muestras()->save($this); 

} 

public function setTipoMuestra($tipomuestra){ 
    return $tipomuestra->muestras()->save($this); 

} 

public function setTipoConsulta($tipoconsulta){ 
    return $tipoconsulta->muestras()->save($this); 

} 
public function setGanado($ganado){ 
    return $ganado->muestra()->save($this); 

} 

public static function guardarNueva($request){ 
    $datos = $request->except(['tipo_muestra_id','tipo_consulta_id','laboratorio_id','ganado_id','fecha_extraccion']); 
    $muestra=self::create($datos); 
    $muestra->setFechaExtraccion($request->input('fecha_extraccion')); 
    $muestra->setGanado(Ganado::find($request->input('ganado_id'))); 
    $muestra->setLaboratorio(Laboratorio::find($request->input('laboratorio_id'))); 
    $muestra->setTipoConsulta(TipoConsulta::find($request->input('tipo_consulta_id'))); 
    $muestra->setTipoMuestra(TipoMuestra::find($request->input('tipo_muestra_id'))); 
    return $muestra; 

} 

} 

Muestra的遷移是:

class CreateMuestrasTable extends Migration 
{ 
/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('muestras', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('tubo')->unique(); 
     $table->date('fecha_extraccion'); 
     $table->integer('ganado_id'); 
     $table->integer('tipo_muestra_id'); 
     $table->integer('tipo_consulta_id'); 
     $table->integer('laboratorio_id'); 
     $table->timestamps(); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('muestras'); 
} 
} 

而且任何被失敗的其他型號,例如TipoMuestra是這樣的:

class TipoConsulta extends Model 
{ 
// 
protected $fillable=['nombre']; 

protected function muestras(){ 
    return $this->hasMany(Muestra::class); 
} 


public function getSelectOptionAttribute(){ 
    return $this->attributes['nombre']; 
} 
} 

回答

0

只是一個愚蠢的錯誤,改變muestras()方法從保護到公共工作!

public function muestras() { 
... 
} 
相關問題