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'];
}
}